通过


CA2261:请勿将 ConfigureAwaitOptions.SuppressThrowingTask<TResult> 搭配使用

属性
规则 ID CA2261
标题 请勿将 ConfigureAwaitOptions.SuppressThrowingTask<TResult> 搭配使用
类别 使用情况
修复会引起中断还是不会引起中断 非中断
在 .NET 10 中默认启用 作为警告
适用的语言 C# 和 Visual Basic

原因

ConfigureAwaitOptions.SuppressThrowing 的值将传递给 Task<TResult>.ConfigureAwait(ConfigureAwaitOptions)

规则说明

泛型 ConfigureAwaitOptions.SuppressThrowing 不支持 Task<TResult> 选项,因为这可能会导致返回无效 TResult。 此规则会标记使用SuppressThrowingTask<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 将无效并导致运行时错误。