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();
}
Hereは、宣言さx
れている場所に基づいて異なる動作を示します。x
同じ変数の場合、y
複数のスレッドによってキャプチャされて使用されますが、IMO のこの動作は直感的です。
彼らは何を指していますか?