gpt4 book ai didi

c# - 线程顺序执行?

转载 作者:太空狗 更新时间:2023-10-29 22:16:45 26 4
gpt4 key购买 nike

我有这个简单的代码:(我在 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; 行用于捕获变量 - 因此每次迭代都会有自己的值。

2个问题:

1)数字不是连续的,而线程执行是!

2) 有时我得到 少于 10 个数字!

这里是一些执行输出:

enter image description here enter image description here enter image description here enter image description here

问题:

1) 为什么会发生第 1 种情况,我该如何解决?

2) 为什么会发生第 2 种情况,我该如何解决?

最佳答案

不应期望它们是连续的。每个线程都根据内核的选择获得优先级。可能发生它们看起来是顺序的,纯粹是由于每个开始时间的性质,但这纯属偶然。

为确保它们全部完成 - 将每个新线程标记为 IsBackground = false,以便它使可执行文件保持事件状态。例如:

new Thread(() => doWork(tmp)) { IsBackground = false }.Start();

关于c# - 线程顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com