有人能解釋我爲什麼這個代碼不工作:與行動()的委託任務並行庫
...
foreach (VisualChunk chunk in SortedChunks)
{
System.Action a =() => MyFunction_Threaded(chunk);
Console.Write("Synchronous : ");
a.Invoke();
System.Threading.Tasks.Task.Factory.StartNew(
a,
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.Default)
}
...
private void MyFunction_Threaded(VisualChunk chunk)
{
Console.WriteLine(chunk.ChunkID);
}
它給了我下面的輸出在控制檯:
Synchronous : 0
Synchronous : 1
Synchronous : 2
Synchronous : 3
Synchronous : 4
Synchronous : 4294967291
Synchronous : 4294967292
Synchronous : 4294967293
Synchronous : 4294967294
Synchronous : 4294967295
Synchronous : 4294967296
Synchronous : 4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
4294967297
Synchronous : 4294967298
4294967298
其實這個代碼是當.net framework 4.5安裝時(win 8或VS2012)完美工作。 當只安裝4.0時,這個問題正在增加!
捕獲的循環變量。再次...搜索堆棧溢出的那個術語。考慮到有多少人遇到這個問題,這顯然是語言上的一個缺陷。 – usr
@usr我會說它*是*語言中的缺陷。它已被修復在C#5中。 – svick
@svick誰知道?!這是否曾經宣佈過某處(除了規範)?我只知道他們正在考慮這一步,而不是他們真的接受了。 C#5中最隱藏的新功能之一。 – usr