2013-03-27 90 views
1

当应用程序要关闭时,是否有任何框架支持,但有一些未完成的任务?
如何不让应用程序在任务运行时退出

任务默认在后台线程的上下文中运行。有时,它的确定只是为了让任务完成:

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

但是如果任务有需要completition延续这不起作用。特别是如果某些任务将在UI线程下运行。
可以通过WhenAll()获得所有“最终”任务并推迟应用程序退出。
但是我不知道如何使用async/await时也是这样。

所以我想知道是否有这种情况下的任何支持。框架提供了什么保证或者如何执行它们?

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

回答

0

另外,您不应该在线程池线程上设置IsBackground

对于async方法,确保您的方法返回Task而不是void,然后你可以使用WhenAllawait他们。您可以让您的事件处理程序捕获顶级Task而不是await它们。

+0

你能说明将IsBackground设置为false会出现什么问题吗? – 2013-03-27 12:11:57

+1

这是一个线程池线程;它不属于你。 – 2013-03-27 12:45:29

+0

但是我的任务一直拥有它,直到完成。而且我只在那个时期设置了IsBackground = false。我错过重要的事情吗? – 2013-03-27 13:23:42

相关问题