我在工作线程中有一个对象,可以指示其停止运行。我可以使用bool或AutoResetEvent来实现此目的:
bool 值:
private volatile bool _isRunning;
public void Run() {
while (_isRunning)
{
doWork();
Thread.Sleep(1000);
}
}
AutoResetEvent:
private AutoResetEvent _stop;
public void Run() {
do {
doWork();
} while (!_stop.WaitOne(1000));
}
然后,
Stop()
方法将_isRunning
设置为false,或调用_stop.Set()
。除此之外,使用AutoResetEvent的解决方案可能会停止得更快一些,这些方法之间有什么区别吗?这个比那个好吗?
最佳答案
C#volatile不能提供所有保证。它可能仍会读取过时的数据。最好使用底层OS同步机制,因为它提供了更强大的保证。
所有这些都是Eric Lippert所著的discussed深度文章(非常值得一读),这里是简短的报价:
关于c# - AutoResetEvent与 bool 值以停止线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11953234/