【发布时间】:2016-09-07 20:05:21
【问题描述】:
我想从 db 重新加载某些实体,因为我想使用 async/await 重新加载它们的长时间操作。这是我的代码:
private async void btnUpdate_Click(object sender, EventArgs e)
{
Task allTasks = UpdateAppointments();
await allTasks;
}
internal async Task UpdateAppointments()
{
IEnumerable<Entities.Apointment> apps = PContext.Appointments.Select(p => p).Where(p => p.Start >= Start && p.End <= End && p.MachineId == 66);
List<Task> task = new List<Task>();
foreach (Entities.Apointment app in apps)
{
task.Add(PContext.Entry(app).ReloadAsync());
}
await Task.WhenAll(task);
}
我得到错误:
在前一个异步操作完成之前,在此上下文上启动了第二个操作。使用“等待”确保任何 异步操作在调用另一个方法之前已经完成 在这种情况下。不保证任何实例成员都是线程 安全。**
异常详情:
{System.NotSupportedException:在前一个异步操作完成之前,在此上下文上启动了第二个操作。使用 'await' 确保在此上下文中调用另一个方法之前所有异步操作都已完成。不保证任何实例成员都是线程安全的。 在 System.Data.Entity.Internal.ThrowingMonitor.EnsureNotEntered() 在 System.Data.Entity.Core.Objects.ObjectContext.RefreshAsync(刷新模式刷新模式,对象实体,CancellationToken 取消令牌) 在 System.Data.Entity.Internal.InternalEntityEntry.ReloadAsync(CancellationToken cancelToken) 在 System.Data.Entity.Infrastructure.DbEntityEntry`1.ReloadAsync() 在 C:\Git\planningmodule\PlanningModule\PlanningForm.cs:line 307 中的 PlanningModule.PlanningForm.d__20.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 C:\Git\planningmodule\PlanningModule\PlanningForm.cs:line 264 中的 PlanningModule.PlanningForm.d__19.MoveNext() }
内部异常:
空
堆栈跟踪:
_stackTrace {sbyte[192]} 对象 {sbyte[]}
任何想法,如何异步重新加载实体?
【问题讨论】:
标签: c# async-await entity-framework-6