【发布时间】:2015-08-28 13:53:55
【问题描述】:
我有一个单独的 BackgroundWorker 和 ThreadPool 在后台执行方法。 (UI反馈的BackgroundWorker)
线程池:
ThreadPool.QueueUserWorkItem(foo, null);
我知道我需要使用一个标志安全地终止我的 BackgroundWorker,因为如果我在没有标志的情况下关闭它,它会给我一个异常。但是,线程池没有。 (关闭不会抛出任何异常)
BackgroundWorker_DoWork:
while (_isFinished)
{
// Do stuff
}
那么是否有必要对 ThreadPool 做同样的预防措施?
提前致谢。
【问题讨论】:
-
我不明白你的代码示例......如果你有一个做很多工作的循环,为什么首先使用线程池?线程池是产生大量线程所涉及的开销的解决方案。至于最后的事情 - 对于与应用程序和所有线程的生命周期有关的所有事情,我总是自己处理。只有当所有(工作)线程都加入时,应用程序才能结束。这是一种基本的设计实践,可以为您节省很多痛苦。
标签: c# thread-safety threadpool cancellation