代码检查:避免在返回类型为 'void' 且没有类型为 'System.EventArgs' 参数的方法和函数中使用 'async'
此检查会检测将 异步 修饰符与 void 返回类型一起使用,但方法不接受类型为 System.EventArgs 参数的方法和函数。 不建议使用此类方法,因为这些方法中的未处理异常无法被 await,可能导致应用程序崩溃。
public async void Foo(Task<int> task)
{
Process(await task);
}
public void Process(int i) {}
public async void Foo(Task<int> task)
{
try
{
Process(await task);
}
catch (Exception e)
{
throw; // TODO handle exception
}
}
public void Process(int i) {}
快速修复会将 async void 方法的主体包装在一个 try-catch 块中。 这可确保捕获方法中抛出的任何异常,避免未处理异常导致应用程序崩溃。 根据应用程序的具体需求,您可以将 throw; 语句替换为自定义错误处理逻辑。
虽然此快速修复通过捕获异常使 async void 方法更加安全,但除非是事件处理程序等必须使用 void 的特定场景,否则通常更好的做法是将 异步 方法的返回类型设置为 任务。
最后修改日期: 2025年 9月 26日