当虚拟方法不是异步时,覆盖方法的同步
Α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, async
和 Task
时,它可以工作,但我无法在其中调用异步方法:
//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());
}
}
如果以上方法不可行,您可以通过异步进行同步,但不建议
我在 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, async
和 Task
时,它可以工作,但我无法在其中调用异步方法:
//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());
}
}
如果以上方法不可行,您可以通过异步进行同步,但不建议