有誰知道在做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