代码检查:避免对返回类型为 'void' 的方法和函数使用 'async'(对于没有类型为 'System.EventArgs' 参数的方法和函数,避免使用 'async')
此检查会检测这样的方法和函数:将 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 方法更安全,但通常更好的做法是在可能的情况下,将 Task 用作 async 方法的返回类型;除特定场景(如事件处理程序)需要 void 的情况外。
2026年 3月 25日