2014-03-26 91 views
1

我想使用.net线程池或任务库,但是如果机器关机,我无法找到有关线程会发生什么的任何信息。我的假设是,所有添加和未完成的任务都将丢失。但是,也许我对关于并行任务或线程池一起的错误想法。如果线程池中的项目会关闭Windows服务器

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

Task.Factory.StartNew(doSomeWork); 

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

+2

你试过了吗?我的意思是,用'.Sleep(60000)'(5分钟)加载几个任务然后关机并不难。 –

+0

操作系统关心*进程*,而不是线程。确保响应操作系统发送给您的关闭请求,您不会留下任何面包屑来猜测哪种方式是合适的。 –

+0

我用ThreadPool试了一下,其中的任务确实丢失了,但是我还没有用Task试过。我希望有一些内置的关机管理,我只是不知何故在文档中错过了它。听起来不像。 –

回答

1

你的应用程序需要专门监听系统事件,指出系统正在关闭,但它负责制定如何处理这个问题。

在一天结束时不能为了完成您的任务(也不应该)阻止关机。如果您的应用程序需要确保所有任务都完成,那么它需要以某种方式记录完成哪些任务,哪些任务仍处于等待状态,以便在重新启动时可以恢复。

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