分享方式:


CA2008:建立工作時請務必傳遞 TaskScheduler

屬性
規則識別碼 CA2008
標題 建立工作時請務必傳遞 TaskScheduler
類別 可靠性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 No

原因

工作建立或接續作業會使用未指定 TaskScheduler 參數的方法多載。

檔案描述

下列 .NET 工作建立和接續方法具有可指定或省略 TaskScheduler 實例的多載:

請一律指定明確的 TaskScheduler 引數以避免預設值 Current ,其行為是由呼叫端所定義,而且在執行時間可能會有所不同。 Current 會傳回與目前在該執行緒上執行的任何 Task 專案相關聯的排程器。 如果沒有這類工作,則會傳 Default 回 ,代表執行緒集區。 在某些情況下,使用 Current 可能會導致死結或 UI 回應性問題,當它打算線上程集區上建立工作,但會等候回到 UI 執行緒。

如需詳細資訊和詳細範例,請參閱 .NET Framework 4.5 中的 New TaskCreationOptions 和 TaskContinuationOptions。

注意

VSTHRD105 - 避免採用 TaskScheduler.Current 的方法多載是在 Microsoft.VisualStudio.Threading.Analyzers 套件中 實作的 類似規則。

如何修正違規

若要修正違規,請呼叫採用 並明確傳入 DefaultCurrent 讓意圖清楚的方法多載 TaskScheduler

隱藏警告的時機

此警告主要適用于程式庫,其中程式碼可能會在任意環境中執行,以及程式碼不應該對環境做出假設,或方法的呼叫者如何叫用或等候它。 對於代表應用程式程式碼而非程式庫程式碼的專案,可能很適合隱藏警告。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008

若要停用檔案、資料夾或專案的規則,請在組態檔 中將其嚴重性設定為 。 none

[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none

如需詳細資訊,請參閱 如何隱藏程式碼分析警告

另請參閱