Task.Start()、Task.Run() 和 Task.Factory.StartNew():我該用哪種方法?
Jan 12, 2025 am 08:43 AMTask 並行庫 (TPL) 中 Task.Start()
、Task.Run()
和 Task.Factory.StartNew()
的用法詳解
Task 平行庫 (TPL) 提供多種建立和啟動任務的方法,包括 Task.Start()
、Task.Run()
和 Task.Factory.StartNew()
。雖然它們都用於執行非同步操作,但在用法上存在細微差別。
Task.Start()
:一種過時的方法
Task.Start()
是一種較舊的方法,需要在啟動任務之前明確建立 Task 物件。它允許透過 TaskCreationOptions
參數指定其他選項。但是,建議使用 Task.Run()
和 Task.Factory.StartNew()
來取代它。
Task.Run()
:簡化的選項
Task.Run()
是一種簡寫方法,它內部使用帶有預設參數的 Task.Factory.StartNew()
。它設計用於不需要自訂任務選項的簡單場景。與 Task.Start()
不同,它不需要在啟動之前建立 Task 物件。
Task.Factory.StartNew()
:多功能的選擇
Task.Factory.StartNew()
是最通用的方法。它提供用於自訂任務建立的選項,例如指定 TaskScheduler
、CancellationToken
和 TaskCreationOptions
。這允許對任務執行進行細粒度控制。
選擇適合的方法
- 對於簡單的場景,如果預設設定足夠,請使用
Task.Run()
。 - 當需要自訂任務選項時(例如設定
TaskScheduler
或控制執行緒親和力),請使用Task.Factory.StartNew()
。 - 除非有特定需要進行高階任務自訂,否則應避免使用
Task.Start()
。
範例用法
以下程式碼片段說明了這些方法的用法:
// Task.Start() var task = new Task(() => Console.WriteLine("Task started.")); task.Start(); // Task.Run() Task.Run(() => Console.WriteLine("Task started.")); // Task.Factory.StartNew() var task = Task.Factory.StartNew( () => Console.WriteLine("Task started."), TaskCreationOptions.PreferFairness);
結論
雖然 Task.Start()
、Task.Run()
和 Task.Factory.StartNew()
具有類似的功能,但它們的用法應基於應用程式的特定需求。 Task.Run()
適用於大多數常見場景,而 Task.Factory.StartNew()
提供進階自訂選項。由於其過時的性質,通常不建議使用 Task.Start()
。
以上是Task.Start()、Task.Run() 和 Task.Factory.StartNew():我該用哪種方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)