【发布时间】:2011-03-22 19:15:04
【问题描述】:
我继承了一些线程代码,在查看它后,我发现了这样的结构(在后台线程方法中):
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();
}
【问题讨论】:
-
您的停止方法需要调用
bgThread.Join()
标签: .net multithreading synchronization waithandle