有谁知道在做Task.Factory.StartNew
与new Task
之间是否有任何区别,然后在任务上调用Start
。看反射器似乎没有太大的区别。所以也许唯一的区别是Task.Factory.StartNew
返回一个已经开始的任务。它是否正确?Task.Factory.StartNew vs新任务
我知道Task.Factory.StartNew
和Task.Run
有不同的默认选项,而Task.Run
是.Net 4.5的首选选项。
有谁知道在做Task.Factory.StartNew
与new Task
之间是否有任何区别,然后在任务上调用Start
。看反射器似乎没有太大的区别。所以也许唯一的区别是Task.Factory.StartNew
返回一个已经开始的任务。它是否正确?Task.Factory.StartNew vs新任务
我知道Task.Factory.StartNew
和Task.Run
有不同的默认选项,而Task.Run
是.Net 4.5的首选选项。
我发现this Stephen Toub的一篇很棒的文章,它解释了在使用new Task(...).Start()
时实际上会有性能损失,因为start方法需要使用同步来确保任务只调度一次。
他的建议是更愿意在.net 4.0中使用Task.Factory.StartNew
。对于.net 4.5 Task.Run
是the better option。
其实在the article by Stephen Toub他指定Task.Run()是完全等同于使用Task.Factory.StartNew()使用默认参数:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
与异步不完全等同。正如Stephen Toub解释的那样。 [这已经绊倒了我之前](http://stackoverflow.com/questions/24777253/waiting-for-async-await-inside-a-任务) –
有时(很少),你可能需要使用'Task'构造函数,例如:http://stackoverflow.com/q/21424084/1768303 – Noseratio
@StephenCleary [here](http://blog.stephencleary.com/2013/08/startnew)更多地确认“Task.Run”的偏好-is-dangerous.html) – StuartLC