Task 並行庫 (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()
。 範例用法
以下程式碼片段說明了這些方法的用法:
<code class="language-csharp">// 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);</code>
結論
雖然 Task.Start()
、Task.Run()
和 Task.Factory.StartNew()
具有類似的功能,但它們的用法應基於應用程式的特定需求。 Task.Run()
適用於大多數常見場景,而 Task.Factory.StartNew()
提供進階自訂選項。由於其過時的性質,通常不建議使用 Task.Start()
。
以上是Task.Start()、Task.Run() 和 Task.Factory.StartNew():我該用哪種方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!