【问题标题】:Does Windows Sever Shutdown if Items in Threadpool如果线程池中有项目,Windows 服务器是否会关闭
【发布时间】:2014-05-05 04:44:38
【问题描述】:

我想使用 .net Threadpool 或 Task 库,但我无法找到有关机器关闭时线程会发生什么情况的任何信息。我的假设是所有已添加但尚未完成的任务都将丢失。但是,也许我对并行任务或线程池有错误的想法。

场景很简单。我添加了一堆任务:

Task.Factory.StartNew(doSomeWork);

然后有人进来关闭这台机器。如果任务没有完成怎么办?机器是等待,还是只是关闭?有没有办法让它等到它被关闭?

【问题讨论】:

  • 你试过了吗?我的意思是用.Sleep(60000)(5 分钟)加载几个任务然后关机应该不难。
  • 操作系统关心的是进程,而不是线程。请务必响应操作系统向您发送的关闭请求,您没有留下任何痕迹来猜测哪种方式合适。
  • 我用 ThreadPool 尝试过,实际上确实丢失了任务,但我还没有用 Task 尝试过。我希望有某种内置的关闭管理,而我只是在文档中错过了它。听起来不像。

标签: c# parallel-processing threadpool


【解决方案1】:

您的应用需要专门监听指示系统正在关闭的系统事件,但它负责确定如何处理。

归根结底,它不能阻止关机以完成您的任务(也不应该这样做)。如果您的应用程序需要确保任务全部完成,那么它需要以某种方式记录哪些任务已完成,哪些任务仍处于待处理状态,以便在重新启动时可以恢复。

this MSDN article on System Events for details of handling shutdown notifications

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多