【发布时间】:2013-12-29 21:44:55
【问题描述】:
这个例子是实体框架,但问题更多是关于如何在一个循环中await 多个async 任务。假设我在自定义 DbContext 类上有以下方法:
public async Task DiscardChangesAsync()
{
foreach (var entry in ChangeTracker.Entries().Where(x => x != null))
{
switch (entry.State)
{
case EntityState.Added:
entry.State = EntityState.Detached;
break;
case EntityState.Modified:
entry.State = EntityState.Unchanged;
break;
case EntityState.Deleted:
await entry.ReloadAsync(); // <-- only async method
break;
}
}
}
上面编译并运行,但我不确定它的效率如何。例如,如果上下文包含 10 个已删除的实体条目,则线程会在每个 ReloadAsync 处停止并等待,然后再继续循环,对吗?有什么方法可以让循环继续执行,并返回一个新的Task,直到所有 10 个ReloadAsync 调用都完成后才能完成?
【问题讨论】:
标签: loops task-parallel-library async-await c#-5.0 entity-framework-6