我有这样一个简单的代码: (我在Linqpad中运行它)
void Main()
{
for ( int i=0;i<10;i++)
{
int tmp=i;
new Thread (() =>doWork(tmp)).Start();
}
}
public void doWork( int h)
{
h.Dump();
}
int tmp=i;
这一行是为了捕获变量,所以每次迭代都会有自己的值。
存在两个问题:
1) 数字不是顺序的,而线程执行是顺序的!
2) 有时我得到的数字比10小!
以下是一些执行输出:
问题:
1) 为什么会发生第一种情况,如何解决?
2) 为什么会发生第二种情况,如何解决?
main
返回将终止您的程序。我不明白你对1的问题——你的代码中没有任何努力使它们成为顺序执行,如果你想让它们成为顺序执行,为什么要将它们派发到线程中? - David Schwartz