任务创build为后台线程?

我只是想知道在dot.net 4新的任务类是创build一个后台或前台线程?

通常我会在一个线程上设置“IsBackground”,但是Task上没有这个属性。

我一直无法在MSDN上find任何此类文档:-(

不应该很难validation:

class Program { static void Main() { Task .Factory .StartNew(() => Console.WriteLine(Thread.CurrentThread.IsBackground)) .Wait(); } } 

答案是…

ǝnɹʇ

它似乎以后台线程运行。

看到这个线程:

运行多个C#任务asynchronous

如果您指的是使用asyncawait关键字来启动Task<T> ,那么答案是否定的。 摘自:

“asynchronous和等待关键字不会导致创build额外的线程,asynchronous方法不需要multithreading,因为asynchronous方法不能在自己的线程上运行,该方法运行在当前同步上下文上,并在线程上使用时间只有当方法处于活动状态时,才可以使用Task.Run将CPU绑定的工作移动到后台线程,但后台线程不会帮助正在等待结果可用的进程。

任务由来自系统线程池的线程执行。 来自线程池的线程默认在后台执行。

如果您还不确定后台任务,只需尝试访问任务内的GUI元素,如:

 public async Task<int> ProcessStuff_Async() { while(true) { label1.Text = "processing next item"; 

得到运行时exception:

跨线程操作无效:控制从其创build线程以外的线程访问的“label1”。

就像那些老的普通后台线程一样。

有MSDN文档中的信息(截至2017年:-),例如:

处理这个问题的最好方法是启动后台线程 ,使用Task.Run完成工作,并等待其结果。 这将允许UI在工作完成时感觉平稳。

这个文档甚至有一个部分What happens under the coversWhat happens under the covers