【发布时间】:2012-04-26 18:53:01
【问题描述】:
当我运行这段代码时
private void button1_Click(object sender, EventArgs e)
{
Start(sender, e);
}
private void Start(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
System.Threading.Tasks.Task.Factory.StartNew(() => dosomething(i));
Debug.WriteLine("Called " + i);
}
Debug.WriteLine("Finished");
}
public void dosomething(int i)
{
Debug.WriteLine("Enters " + i);
lock (this)
{
Debug.WriteLine("Working " + i);
Thread.Sleep(100);
}
Debug.WriteLine("Done " + i);
}
.Net 4.0 和 4.5 版的输出不同。在 4.0 数字 5 重复时,我可以看到 i 的原因值在某些任务执行之前被移动到 5,但 4.5 的相同代码显示不同的输出。
(使用 VS 2010 .Net 4.0 运行输出)
Called 0
Called 1
Enters 1
Working 1
Called 2
Called 3
Called 4
Finished
Enters 0
Done 1
Enters 5
Working 0
Working 5
Done 0
**Enters 5
Working 5
Done 5
Enters 5
Done 5
Working 5
Done 5**
但是当我使用 .Net 4.5 (VS 2011 beta) 运行时,结果是,
(使用 VS 2011 beta .Net 4.5 运行输出)
Enters 0
Working 0
Called 0
Called 1
Enters 2
Called 2
Enters 2
Enters 3
Called 3
Called 4
Finished
Done 0
Working 2
Enters 5
Done 2
Working 3
Done 3
Working 5
Done 5
Working 2
Done 2
在 CLR 4.5 下我看不到 Task 所做的更改?谁能告诉我.Net 4.5有什么变化。
【问题讨论】:
标签: task-parallel-library task .net-4.5 c#-5.0