我有一个基类,它的子类可能想要异步实现一个方法。我已经实现如下,但是 Visual Studio 建议GetEntityName在基本同步中进行,因为它没有await任何作用。然而,这会让孩子们崩溃。有没有更好的办法? public abstract class BaseHandler { protected virtual async Task<string> GetEntityName(object entity) { return string.Empty; } } public class ChilldHandler: BaseHandler { protected override async Task<string> GetEntityName(object entity) { return await LongRunningService.DoSomething(entity); } }
2 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
public abstract class BaseHandler
{
protected virtual Task<string> GetEntityName(object entity)
{
return Task.FromResult(string.Empty);
}
}
因为你的方法没有做任何可以等待的事情,你可以通过使用Task.FromResult方法返回已经完成的任务。
你不需要 await 里面的任何东西GetEntityName,因为没有任何不完整的 Task 需要等待。
至尊宝的传说
TA贡献1789条经验 获得超10个赞
async
是它出现的特定方法的实现细节。尽管它出现在哪里,它并不构成方法签名的一部分。async
(这也是接口1中不允许您使用的原因——因为它们没有实现,而且它不是方法签名的一部分)。
也就是说,任何虚拟Task
返回方法都可能override
在子类中具有/不使用的实现,async
并且原始基方法的标记方式也无关紧要。
正如 FCin 所示,完全有可能有一个同步方法仍然返回Task
您想要的作为该方法的返回类型。
1忽略接口的新奇默认实现。
- 2 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消