有人知道在执行Task.Factory.StartNew
与new Task
之后是否有任何区别,然后在任务上调用Start
。看反射器似乎没有太大的区别。所以也许唯一的区别是Task.Factory.StartNew
返回已经启动的任务。这是对的吗?
我知道Task.Factory.StartNew
和Task.Run
有不同的默认选项,Task.Run
是.Net 4.5的首选选项。
答案 0 :(得分:53)
我在Stephen Toub发现了this一篇很棒的文章,它解释了在使用new Task(...).Start()
时实际上存在性能损失,因为start方法需要使用同步来确保任务只安排一次
他的建议是更喜欢将Task.Factory.StartNew
用于.net 4.0。对于.net 4.5 Task.Run
是the better option。
答案 1 :(得分:17)
实际上在the article by Stephen Toub中,他指定Task.Run()与使用具有默认参数的Task.Factory.StartNew()完全等效:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);