Sat*_*esh 1 c# windows service multithreading
我在我的windows服务中为每个循环启动了多个线程.我没有提到这些线程的任何名称.我怎么能终止这些线程.我使用以下代码来创建线程.
new Thread(() =>
{
foreach (MyClass detail in MyclassList)
{
DoWork(detail);
}
}).Start();
Run Code Online (Sandbox Code Playgroud)
通过启动这些线程,我为每个细节创建一个计划任务.我可以在计划完成后处理这个线程吗?如何?
强行终止线程永远不是一个好主意.你真正应该做的是在循环内部设置一些适当设计的"我应该继续"检查,你可以在外部设置为"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)
但是,有许多方法可以解决线程安全的退出测试; 唯一有点棘手的事情是保持某种上下文可以访问被检查的东西.
归档时间: |
|
查看次数: |
907 次 |
最近记录: |