簡體   English   中英

當虛擬方法不是異步時,覆蓋方法的同步

[英]Α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 以返回Task<CarModel> 然后,您可以使用Task.FromResult在您的基礎中同步返回。

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

如果以上不可能,您可以通過異步進行同步,但推薦https://stackoverflow.com/a/9343733/1020941

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM