C# 异步/无等待调用的等待

C# 异步/无等待调用的等待,c#,async-await,C#,Async Await,我有一个虚拟方法,它有时包含等待调用,有时不包含。IDE确实给了我警告,正确的处理方法是什么 在我的基础课上: protected virtual async Task GoNext () 从基类通过wait调用它 然后在我的子类中,我重写了这个方法,但有时它确实包含等待,有时它不包含等待。关键字async实际上不是继承的方法签名的一部分,但更多的是给编译器一个信号,它需要根据异步方法的模式编译和重写方法 因此,如果继承的方法不使用wait关键字,则可以在继承的方法上省略async关键字 请注

我有一个虚拟方法,它有时包含等待调用,有时不包含。IDE确实给了我警告,正确的处理方法是什么

在我的基础课上:

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关键字吗?您发现的一些示例应该会使它成为一个更好的问题。