【问题标题】:Is it necessary to end a ThreadPool on Application.Exit()?是否有必要在 Application.Exit() 上结束 ThreadPool?
【发布时间】: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


【解决方案1】:

没有。

ThreadPool threads, according to MSDN,是后台线程,在主执行线程退出后不会让应用程序保持活动状态。当应用程序退出时,它们也会停止执行。

后台线程也 do not throw exceptions 如果在应用程序关闭期间关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2018-06-18
    • 2013-01-21
    • 2012-11-07
    相关资源
    最近更新 更多