次の動作が発生しました。
for (var i = 0; i < 50; ++i) {
Task.Factory.StartNew(() => {
Debug.Print("Error: " + i.ToString());
});
}
一連の「エラー:x」が発生します。ここで、xのほとんどは50に等しくなります。
同様に:
var a = "Before";
var task = new Task(() => Debug.Print("Using value: " + a));
a = "After";
task.Start();
結果は「値の使用:後」になります。
これは明らかに、ラムダ式の連結がすぐには発生しないことを意味します。式が宣言されたときに、ラムダ式で外部変数のコピーを使用するにはどうすればよいですか?以下はうまく機能しません(これは必ずしも一貫性がないわけではありません、私は認めます):
var a = "Before";
var task = new Task(() => {
var a2 = a;
Debug.Print("Using value: " + a2);
});
a = "After";
task.Start();