Home > Back-end >  Αsync for overridden method when virtual method isn't async
Αsync for overridden method when virtual method isn't async

Time:02-24

I have class in C# with virtual method, for example:

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

And second class that inherits from 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");
    }
}

Now I get error: Return type must be CarModel to match overridden member Car.Run() When I remove await, async and Task from Run from CarFiat class it works, but I can't call async method inside it:

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

    //await MeasureSpeed();

    return carModel;
}

CodePudding user response:

You will have to modify your base class to return Task<CarModel>. You can then use Task.FromResult to return synchronously in your base.

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

If the above is not possible you can do sync over async, but its NOT recommend https://stackoverflow.com/a/9343733/1020941

  • Related