当虚拟方法不是异步时,覆盖方法的同步

Αsync for overridden method when virtual method isn't async

我在 C# 中有 class 虚方法,例如:

public class Car
{
    public virtual CarModel Run()
    {
        return new CarModel();
    }
}

第二个 class 继承自 Car class:

public class CarFiat : Car
{
    public async override Task<CarModel> Run()
    {
        var carModel = base.Run();

        await MeasureSpeed();

        return carModel;
    }

    private async Task<string> MeasureSpeed()
    {
        return await Task.FromResult("50");
    }
}

现在我得到错误:Return type must be CarModel to match overridden member Car.Run() 当我从 CarFiat class 中从 Run 中删除 await, asyncTask 时,它可以工作,但我无法在其中调用异步方法:

//public async override Task<CarModel> Run()
public override CarModel Run()
{
    var carModel = base.Run();

    //await MeasureSpeed();

    return carModel;
}

您必须将基数 class 修改为 return Task<CarModel>。然后,您可以在您的基地中同步使用 Task.FromResult 到 return。

public class Car
{
    public virtual Task<CarModel> Run()
    {
        return Task.FromResult(new CarModel());
    }
}

如果以上方法不可行,您可以通过异步进行同步,但建议