我在 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/