2014-07-12 69 views

回答

0

從MSDN文檔兩種功能:

TaskFactory.StartNew<TResult>:調用StartNew在功能上等同於使用它的構造函數之一創建Task<TResult> ...

TaskFactory<TResult>.StartNew:調用StartNew功能上等同於通過使用Task<TResult>構造函數之一來創建任務...

實際上從功能的角度來看存在一些細微差別:

第一次使用Task<T>類時,靜態構造函數會創建一個新的TaskFactory<T>對象並將其存儲。這實際上是一個小對象,但需要的內存將保留到AppDomain的生命週期結束,但Task的靜態構造函數只創建一個對象。

因此,如果您將使用很多類型來創建任務,請使用Task.Factory.StartNew<T>,因爲您不會使運行時創建所有TaskFactory<T>對象。 如果僅適用一種或兩種類型,請將Task<T>.Factory分配給一個變量,並將其用於更簡單的代碼。

更新:正如@Kirill Shlenskiy在評論中提到的那樣,我犯了一個錯誤。所以這兩者真的沒有區別。

+1

我想檢查你的第二點重新'TaskFactory '分配。 'Task.Factory.StartNew ''返回'Task ',因此'Task '的類型初始化程序必須運行並在後面分配'Task .Factory'(或更具體地說是支持它的's_factory'靜態只讀字段)無論您使用哪種方法,封面。 –

+1

感謝基里爾。我犯了一個錯誤。 – Alireza

相關問題