【发布时间】:2019-03-01 07:10:51
【问题描述】:
我们有一个返回类型为async Task<> 的旧方法。它当前的实现需要查询数据库,因此需要异步操作。但是我们将其更改为仅使用内存中的对象,因此基本上我们不再需要在实现中进行异步操作,但我不想更改方法的签名以不破坏该方法的任何调用者。
现在,我应该将实现包装在 await Task.FromResult 中,还是应该不使用任何 await 并直接取消警告?
【问题讨论】:
-
今天早上我问自己这个确切的问题。我有点惊讶,甚至对此有警告。如果性能是一个问题,你会想要避免不必要的
await,否则我认为这样做不会有很大的问题 -
嗨,保罗,我建议使用
await Task.FromResult,因为在执行异步操作时它一直是异步的(这很好)。仍然不会有任何影响,因为任务将立即返回您想要的响应。通过这种方式,您不会修改当前的抽象(或方法签名),并且“如果”对所采取的方法(例如查询数据库或从其他服务)进行了更改,您只需要实现该部分。 -
@Cheranga "async all way" 意味着你所有的调用链都应该返回任务,而不是你必须使用
async关键字 -
我更正了我的评论,是重复的。删除
async并返回Task.FromResult -
@CamiloTerevinto 一个完全合理的理由是为了保持一致性
标签: c# async-await