Roy*_*mir 5 .net c# clr multithreading .net-4.0
我有这个简单的代码:( 我在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();
}
Run Code Online (Sandbox Code Playgroud)
该int tmp=i;行用于捕获变量 - 因此每次迭代都有自己的值.
2个问题:
1)数字不是顺序的,而线程执行是!
2)有时我得到的数字少于 10个!
这里有一些执行输出:




问题:
1)为什么案例1正在发生,我该如何解决?
2)为什么案例2正在发生,我该如何解决?
不应期望它们是连续的.每个线程都会在内核选择时获得优先级.可能会发生这样的情况,它们看起来是连续的,完全取决于每个开始时的性质,但这只是纯粹的机会.
为了确保它们都完整 - 将每个新线程标记为IsBackground = false,以便使可执行文件保持活动状态.例如:
new Thread(() => doWork(tmp)) { IsBackground = false }.Start();
Run Code Online (Sandbox Code Playgroud)