使用執行緒集區的最佳實踐

本主題說明使用執行緒池的最佳實務。

應該做的事

  • 利用執行緒池在你的應用程式中做平行工作。

  • 使用工作項目來完成延伸任務,且不會阻塞 UI 執行緒。

  • 創造短命且獨立的工作項目。 工作項目會以非同步方式執行,並且可依任何順序從佇列提交至集區。

  • 將更新發送到 UI 執行緒。 在 WinUI 3 應用程式中,請使用來自 Microsoft.UI.Dispatching.DispatcherQueueDispatcherQueue.TryEnqueue

  • 請使用 ThreadPoolTimer.CreateTimer 代替 Sleep 函式。

  • 使用執行緒池,而不是自己建立執行緒管理系統。 執行緒池在作業系統層級運行,具備進階功能,並根據裝置資源與流程內及系統內的活動動態擴展進行優化。

  • 在 C++ 中,確保工作項目代理使用敏捷執行緒模型(C++ 代理預設為敏捷)。

  • 當你無法容忍資源分配失敗時,請使用預先分配的工作項目。

禁忌事项

  • 不要建立 週期值為<1 毫秒(包含 0 毫秒)的週期計時器。 這會使工作項目作為單次觸發計時器運作。

  • 不要提交那些完成時間超過你在 期限 參數中指定的時間的週期性工作項目。

  • 不要嘗試從由背景工作所分派的工作項目傳送 UI 更新(快顯通知和通知除外)。 相反地,請使用背景任務進度與完成處理程式,例如 IBackgroundTaskInstance.Progress

  • 當您使用採用 async 關鍵字的工作項目處理常式時,請勿假設當工作項目已設為完成狀態時,處理常式中的所有程式碼都已執行。 執行緒池的工作項目可在處理程序中所有程式碼執行前就設定為完整狀態。 在處理常式內,位於 await 關鍵字後方的程式碼,可能會在工作項目設為完成狀態後才執行。

  • 不要嘗試在未初始化的情況下執行一個預先分配的工作項目超過一次。 建立一個定期工作項目