.NET TPL:了解 Task.Run()、Task.Factory.StartNew() 和 Task.Start()
並發在現代應用程式中至關重要,.NET 中的任務並行庫 (TPL) 提供了用於管理並發操作的強大工具。 本文闡明了 Task.Run()
、Task.Factory.StartNew()
和 Task.Start()
在建立和啟動任務方面的差異。
在 TPL 中建立和執行任務
TPL 任務代表獨立的工作單元。 您可以使用委託或 lambda 表達式定義工作,然後安排其執行。三種主要方法有助於實現這一點:
Task.Start()
:被認為已過時;使用 Task.Factory.StartNew()
取代。 Task.Run()
:這種簡化的方法在 .NET 4.5 中引入,提供了一種在執行緒池上執行任務的安全且有效率的方法。 Task.Factory.StartNew()
:提供對任務建立和調度的細微控制,允許進階自訂。 主要差異和最佳實踐
雖然這三種方法最終都會執行任務,但它們的功能和適用性有所不同:
Task.Run()
:大多數情況下的建議方法。它隱式地利用線程池,簡化任務創建,並防止子任務附加的潛在問題。 其簡單的性質使其成為通用非同步操作的理想選擇。
Task.Factory.StartNew()
:當 Task.Run()
的預設行為不足時使用此選項。 它允許您指定諸如 TaskCreationOptions.LongRunning
(針對長時間運行的任務)之類的選項並選擇自訂調度程序。這提供了最大的靈活性,但需要更深入地了解 TPL 內部結構。
Task.Start()
:除非絕對必要,否則請避免使用此方法,因為它缺乏控制並且可能出現同步問題。 最好替換為Task.Factory.StartNew()
。
何時使用每種方法
Task.Run()
:大多數非同步操作的預設選擇。 它的簡單性和效率使其成為大多數開發人員的首選方法。
Task.Factory.StartNew()
:在下列情況下使用此功能:
TaskCreationOptions
(例如LongRunning
)。 Task.Start()
的舊程式碼。 Task.Start()
:一般情況下,避免使用此方法。
範例:
<code class="language-csharp">// Using Task.Run() Task taskA = Task.Run(() => Console.WriteLine("Hello from TaskA")); // Using Task.Factory.StartNew() with TaskCreationOptions.LongRunning Task taskB = Task.Factory.StartNew(() => { Console.WriteLine("Hello from TaskB"); }, TaskCreationOptions.LongRunning);</code>
以上是Task.Run()、Task.Factory.StartNew() 和 Task.Start():什麼時候應該使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!