CA2261:请勿将 ConfigureAwaitOptions.SuppressThrowing
与 Task<TResult>
搭配使用
属性 | 值 |
---|---|
规则 ID | CA2261 |
标题 | 请勿将 ConfigureAwaitOptions.SuppressThrowing 和 Task<TResult> 搭配使用 |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为警告 |
原因
ConfigureAwaitOptions.SuppressThrowing 的值将传递给 Task<TResult>.ConfigureAwait(ConfigureAwaitOptions)。
规则说明
泛型 Task<TResult> 不支持 ConfigureAwaitOptions.SuppressThrowing 选项,因为这可能会导致返回无效 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
将无效并导致运行时错误。