JetBrains Rider 2025.2 Help

代码检查:避免在委托类型返回 'void' 时使用 'async' lambda

此检查报告了在异步上下文中使用 void 委托类型的情况。 这里的问题与 async void 方法的问题相同,但更难发现。

为了说明问题,让我们考虑以下方法:

public String RunThisAction(Action doSomething) { doSomething(); return "OK"; }

doSomething 参数是 操作 委托类型,并返回 void。 在同步上下文中使用此方法是安全的,例如,

RunThisAction(() => Console.WriteLine("Test"));

但在异步上下文中使用,例如,

RunThisAction(async () => await Task.Delay(1000)); // or RunThisAction(async delegate { await Task.Delay(1000); });

可能会导致运行时问题。 以下是一个示例:假设我们决定扩展 lambda 以抛出一个异常:

RunThisAction(async () => { await Task.Delay(1000); throw new NotImplementedException(); });

由于我们的 doSomething 委托是 void ,异常将永远不会影响调用线程,也不会被 捕捉 捕获。

最后修改日期: 2025年 9月 26日