c# - 如何终止在 C# 中的 foreach 循环中启动的线程

标签 c# windows multithreading service

我在 Windows 服务中为每个循环启动了多个线程。我没有为这些线程提及任何名称。我如何终止这些线程。 我使用以下代码创建线程。

 new Thread(() =>
            {
                foreach (MyClass detail in MyclassList)
                {
                    DoWork(detail);
                }

            }).Start();

通过启动这些线程,我为每个细节创建了一个计划任务。我可以在计划完成后处理这个线程吗?如何处理?

最佳答案

强行终止线程绝不是个好主意。您真正应该做的是在循环内放置一些经过适当设计的“我应该继续”检查,您可以在外部将其设置为“否”。 如何做到这一点更多地取决于上下文...例如:

        int shouldExit = 0;
        new Thread(() =>
        {
            foreach (MyClass detail in MyclassList)
            {
                if(Thread.VolatileRead(ref shouldExit) != 0) break;
                DoWork(detail);
            }
        }).Start();
        ...
        // to terminate loop:
        Thread.VolatileWrite(ref shouldExit, 1);

但是,有无数种方法可以解决线程安全的退出测试;唯一有点棘手的事情是通过访问被检查的事物来保持某种上下文。

关于c# - 如何终止在 C# 中的 foreach 循环中启动的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634506/

相关文章:

c# - 使用 System.Configuration 验证器验证双重

c - Pthread连接段错误

java - Android - 如何找出当前线程的创建位置?

C# PowerShell - AddScript 作为多个语句

C# 静态类和 is 运算符

python - 如何使 python 脚本在 Windows 上可执行?

c# - 在远程服务器上安装windows服务

.net - 多线程最佳实践

c# - 来自 golang 和 c# 的 elixir 函数的并行或异步任务

Windows TCP 套接字接收延迟