代码检查:避免对返回类型为 'void' 且不包含类型为 'System.EventArgs' 参数的方法和函数使用 'async' 修饰符
此检查会检测使用了 async 修饰符并具有 void 返回类型的方法和函数,但该方法未接受类型为 System.EventArgs 的参数。 不推荐使用此类方法,因为这类方法中的未处理异常无法进行等待,可能会导致应用程序崩溃。
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 方法更安全,但通常更好的做法是在可能的情况下,为 async 方法使用 Task 作为返回类型,除非是在需要使用 void 的事件处理程序等特定场景中。
最后修改日期: 2025年 9月 27日