如何在任务运行时让应用程序退出

时间:2013-03-27 06:46:30

标签: multithreading task-parallel-library async-await

应用程序何时关闭但有些未完成的任务是否有任何框架支持?

默认情况下,任务在后台线程的上下文中运行。有时候让任务完成就可以了:

Task.Factory.StartNew(() =>
                          {
                              Thread.CurrentThread.IsBackground = false;
                              Thread.Sleep(20000);
                              Thread.CurrentThread.IsBackground = true;
                          });

但是如果任务具有需要完成的延续,则这不起作用。特别是如果某些任务将在UI线程下运行 可以获得所有“最终”任务,并使用WhenAll()推迟应用程序退出 但是,当使用async / await时,我不知道如何做同样的事情。

所以我想知道是否有任何支持这种情况。是否有任何保证框架给出或执行它们的方法?

我现在看到的唯一方法是将标志设置为关键任务尚未完成的标志。

1 个答案:

答案 0 :(得分:0)

顺便说一句,你不应该在线程池线程上设置IsBackground

对于async方法,请确保您的方法返回Task而不是void,然后您可以await使用WhenAll Task。您可以让事件处理程序捕获顶级await而不是{{1}}。