CA2261:請勿搭配使用 ConfigureAwaitOptions.SuppressThrowing
Task<TResult>
屬性 | 值 |
---|---|
規則識別碼 | CA2261 |
標題 | 請勿搭配使用 ConfigureAwaitOptions.SuppressThrowing Task<TResult> |
類別 | 使用方式 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 8 中啟用 | 作為警告 |
原因
的值 ConfigureAwaitOptions.SuppressThrowing 會傳遞至 Task<TResult>.ConfigureAwait(ConfigureAwaitOptions) 。
檔案描述
泛 ConfigureAwaitOptions.SuppressThrowing 型 Task<TResult> 不支援 此選項,因為這可能會導致傳回無效 TResult
的 。 此規則會標幟 使用 SuppressThrowing 搭配 Task<TResult> ,在建置階段呈現錯誤,而不是執行時間。
如何修正違規
Task<TResult>在呼叫 ConfigureAwait(ConfigureAwaitOptions) 之前,將 轉換成非泛型 Task 。
範例
下列程式碼片段顯示 CA2261 的違規:
Task<int> t = new Task<int>(() => 1);
t.ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
下列程式碼片段顯示修正:
Task<int> t = new Task<int>(() => 1);
((Task)t).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
隱藏錯誤的時機
您不應該隱藏此規則的警告。 如果工作發生錯誤或取消, TResult
將會無效並導致執行階段錯誤。