我总的线程n00b,我想找出一种方法来先关闭线程,然后通过强制请求。如何阻止线程在代码的特定部分内终止?
我有一个ProcessManager
类启动了一堆Process
类主题:
public class ProcessManager
{
private IProcessRepository _processRepository;
private List<Thread> _threads = new List<Thread>();
public ProcessManager(IProcessRepository processRepository)
{
_processRepository = processRepository;
}
public void StartAllProcesses()
{
foreach (var process in _processRepository.GetActiveProcesses())
{
var thread = new Thread(process.ProcessUntilStopped);
_threads.Add(thread);
thread.Start();
}
}
public void StopAllProcesses()
{
// What to do here?
}
}
public class Process
{
private bool _stopFlag = false;
public void ProcessUntilStoppped()
{
while (true)
{
if (_stopFlag) return;
// I don't want this call interrupted by Thread.Join(),
// but it's important for multiple Processes to be able to DoWork()
// simultaneously.
DoWork();
}
}
public void Stop()
{
_stopFlag = true;
}
}
如何让我的线程不被打断同时呼吁DoWork()
,而是等到下一个循环迭代停止? (我的理解是lock
在这里不合适,因为多个线程在运行时必须能够调用DoWork()
,所以没有资源需要互斥)。
如何检查以查看是否我的线程已经很好地停止了,如果没有,就强迫它停止? (我知道Thread.Abort()
是不良业障。)
我认为这是一个相当标准的解决方案的常见问题,但我并不真正熟悉正确的命名或.NET方法来调用。
我的答案在您接受答案后发布,这很好。只要确保你将_stopFlag标记为volatile即可。 –