CA2261:请勿将
| 属性 | 值 |
|---|---|
| 规则 ID | CA2261 |
| 标题 | 请勿将 ConfigureAwaitOptions.SuppressThrowing 和 Task<TResult> 搭配使用 |
| 类别 | 使用情况 |
| 修复会引起中断还是不会引起中断 | 非中断 |
| 在 .NET 10 中默认启用 | 作为警告 |
| 适用的语言 | C# 和 Visual Basic |
原因
ConfigureAwaitOptions.SuppressThrowing 的值将传递给 Task<TResult>.ConfigureAwait(ConfigureAwaitOptions)。
规则说明
泛型 ConfigureAwaitOptions.SuppressThrowing 不支持 Task<TResult> 选项,因为这可能会导致返回无效 TResult。 此规则会标记使用SuppressThrowing与Task<TResult>的情况,以便在构建时而非运行时显现错误。
如何解决违规
在调用 ConfigureAwait(ConfigureAwaitOptions) 之前将 Task<TResult> 强制转换为非泛型 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 将无效并导致运行时错误。