C# 异步/无等待调用的等待
我有一个虚拟方法,它有时包含等待调用,有时不包含。IDE确实给了我警告,正确的处理方法是什么 在我的基础课上:C# 异步/无等待调用的等待,c#,async-await,C#,Async Await,我有一个虚拟方法,它有时包含等待调用,有时不包含。IDE确实给了我警告,正确的处理方法是什么 在我的基础课上: protected virtual async Task GoNext () 从基类通过wait调用它 然后在我的子类中,我重写了这个方法,但有时它确实包含等待,有时它不包含等待。关键字async实际上不是继承的方法签名的一部分,但更多的是给编译器一个信号,它需要根据异步方法的模式编译和重写方法 因此,如果继承的方法不使用wait关键字,则可以在继承的方法上省略async关键字 请注
protected virtual async Task GoNext ()
从基类通过wait调用它
然后在我的子类中,我重写了这个方法,但有时它确实包含等待,有时它不包含等待。关键字
async
实际上不是继承的方法签名的一部分,但更多的是给编译器一个信号,它需要根据异步方法的模式编译和重写方法
因此,如果继承的方法不使用wait
关键字,则可以在继承的方法上省略async
关键字
请注意,您仍然需要返回任务
或任务
,该部分是继承的方法签名的一部分
所以这会给你一个警告:
class Base
{
public virtual async Task<int> Method()
{
await Task.Delay(10);
return 42;
}
}
class Derived : Base
{
// next line produces warning
public override async Task<int> Method()
{
return 42;
}
}
class Derived : Base
{
public override Task<int> Method()
{
return Task.FromResult(42);
}
}
请注意,我在最后一个方法中更改了
return
语句,因为async
关键字带来的“魔力”的一部分是在任务中自动包装返回值。如果您有其他方法获得任务
,显然您不需要像上面那样包装结果。我不理解这个问题<代码>异步
不是继承的方法签名的一部分。声明不使用await
的重写方法时,不要编写async
。您仍然需要返回任务
或任务
。您应该发布一些显示问题和实际警告的代码,这样就不会混淆您遇到的实际问题。如果该方法不使用wait关键字,您不能使用async关键字吗?您发现的一些示例应该会使它成为一个更好的问题。