我继承了一些线程代码,在查看它时,我发现了这样的结构(在后台线程方法中):
private ManualResetEvent stopEvent = new ManualResetEvent(false);
private void Run_Thread() {
while (!stopEvent.WaitOne(0, true)) {
// code here
}
}
通常有一个公共或私有Stop()
方法,如下所示:
public void Stop() {
stopEvent.Set();
bgThread.Join();
}
我的问题是:在这里使用等待句柄可以提供什么?似乎这样做是为了确保停止发出信号是原子操作,但我认为写入布尔值无论如何都是原子的。如果是这种情况,是否有任何理由不只使用以下内容:
private void Run_Thread() {
while(!stop) {
// code here
}
}
public void Stop() {
stop = true;
bgThread.Join();
}