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 套件中 實作的 類似規則。
如何修正違規
若要修正違規,請呼叫採用 並明確傳入 Default 或 Current 讓意圖清楚的方法多載 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
如需詳細資訊,請參閱 如何隱藏程式碼分析警告 。