我有这个简单的代码:(我在 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();
}
the int tmp=i;
行用于捕获变量 - 因此每次迭代都有其自己的值。
2个问题:
1)数字是not顺序执行,而线程执行!
2)有时我得到less超过10个数字!
以下是一些执行输出:
![enter image description here](https://i.stack.imgur.com/X01wA.jpg)
![enter image description here](https://i.stack.imgur.com/LPV7L.jpg)
![enter image description here](https://i.stack.imgur.com/DfBLZ.jpg)
![enter image description here](https://i.stack.imgur.com/BHOjG.jpg)
问题 :
1)为什么会发生第1种情况,我该如何解决?
2)为什么会发生情况2?我该如何解决?
不应期望它们是连续的。每个线程都有优先级作为内核选择。它可能happen它们看起来是连续的,纯粹是由于每个事件开始的时间的性质,但这纯粹是偶然的。
为了确保它们全部完成 - 将每个新线程标记为IsBackground = false
,以便使可执行文件保持活动状态。例如:
new Thread(() => doWork(tmp)) { IsBackground = false }.Start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)