【发布时间】:2019-10-06 11:24:46
【问题描述】:
我一直在努力检查在哪里等待和在哪里不等待。
我有一个从数据库中获取数据的 Repository 类。 使用 EntityFramework 的代码是这样的:
public async Task<List<Object>> GetAsync()
{
return await context.Set<Object>().ToListAsync();
}
和消费者:
var data = await GetAsync();
在顶层,我也在等待这种方法。 我应该只在其中一种方法上使用 await 吗? 每次等待时使用资源和创建新线程是否会降低性能?
我已经检查了 cmets 中列出的问题,它们并没有提到性能问题,只是说你可以做到。我想要最佳实践以及为什么这样做/不这样做的原因。
【问题讨论】:
-
如果你唯一要做的就是调用另一个异步方法,那么通常你不应该在这种情况下使用 await。如果您必须将该调用放入
using语句或 try/catch 块中,则继续使用 await,但在您的第一个示例中,您可能应该取出 async/await 并直接返回任务,即。public Task<List<Object>> GetAsync() { return context.Set<Object>().ToListAsync(); } -
公平地说,“规则”不止于此。如果您的方法以调用返回任务的方法结束,并且这是整个方法中涉及的唯一任务,并且在此任务完成后您不需要在方法中执行任何操作(例如退出 try/catch、退出一个使用,没有更多的代码,没有这个),那么你不需要让你的方法
async,你可以简单地返回任务并节省一些(轻微的)开销。
标签: c# asynchronous async-await