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

Sat*_*esh 1 c# windows service multithreading

我在我的windows服务中为每个循环启动了多个线程.我没有提到这些线程的任何名称.我怎么能终止这些线程.我使用以下代码来创建线程.

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

            }).Start();
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 8

强行终止线程永远不是一个好主意.你真正应该做的是在循环内部设置一些适当设计的"我应该继续"检查,你可以在外部设置为"no".如何做到这一点取决于上下文...例如:

        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);
Run Code Online (Sandbox Code Playgroud)

但是,有许多方法可以解决线程安全的退出测试; 唯一有点棘手的事情是保持某种上下文可以访问被检查的东西.