Task.Factory.StartNew vs new Task

时间:2014-02-28 05:28:45

标签: c# c#-4.0 asynchronous

有人知道在执行Task.Factory.StartNewnew Task之后是否有任何区别,然后在任务上调用Start。看反射器似乎没有太大的区别。所以也许唯一的区别是Task.Factory.StartNew返回已经启动的任务。这是对的吗?

我知道Task.Factory.StartNewTask.Run有不同的默认选项,Task.Run是.Net 4.5的首选选项。

2 个答案:

答案 0 :(得分:53)

我在Stephen Toub发现了this一篇很棒的文章,它解释了在使用new Task(...).Start()时实际上存在性能损失,因为start方法需要使用同步来确保任务只安排一次

他的建议是更喜欢将Task.Factory.StartNew用于.net 4.0。对于.net 4.5 Task.Runthe better option

答案 1 :(得分:17)

实际上在the article by Stephen Toub中,他指定Task.Run()与使用具有默认参数的Task.Factory.StartNew()完全等效:

Task.Factory.StartNew(someAction, 
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);