这是场景:
我有一个正在运行的 Windows 服务。OnStart()
它设置了一个将调用函数的计时器(我们称之为ProcessEvent()
)。里面的代码ProcessEvent
是临界区,所以只有一个线程可以做以下事情:
private void ProcessEvent(object sender, ElapsedEventArgs e)
{
lock(lockObj)
{
string[] list = GetList();
Parallel.ForEach(list, item => { ProcessItem(item) });
}
}
ProcessItem
可能需要很长时间。
现在,当服务停止时,我OnStop()
目前只是停止并处理计时器。但是我注意到,即使服务停止后,仍有线程仍在运行ProcessItem()
。
那么我怎样才能杀死该程序产生的所有正在运行的线程(主要是由 产生的线程,Parallel.ForEach
但也包括任何等待锁定的线程ProcessEvent
)?
我知道如果我自己创建了线程,我可以设置isBackground
为 true 并且当进程终止时它都会被杀死,但我不会手动创建这些线程。