在 C# 规范 4.0 第 7.15.5.1 节中:
请注意,与未捕获的变量不同,捕获的局部变量可以同时暴露给多个执行线程。
“多线程执行”到底是什么意思?这是否意味着多个线程、多个执行路径或其他?
例如
private static void Main(string[] args)
{
Action[] result = new Action[3];
int x;
for (int i = 0; i < 3; i++)
{
//int x = i * 2 + 1;//this behaves more intuitively. Outputs 1,3,5
x = i*2 + 1;
result[i] = () => { Console.WriteLine(x); };
}
foreach (var a in result)
{
a(); //outputs 5 each time
}
//OR...
int y = 1;
Action one = new Action(() =>
{
Console.WriteLine(y);//Outputs 1
y = 2;
});
Action two = new Action(() =>
{
Console.WriteLine(y);//Outputs 2. Working with same Y
});
var t1 = Task.Factory.StartNew(one);
t1.Wait();
Task.Factory.StartNew(two);
Console.Read();
}
这里x
根据x
声明的位置表现出不同的行为。在y
相同变量被多个线程捕获和使用的情况下,但 IMO 这种行为是直观的。
他们指的是什么?