我在控制器中有asp.net mvc任务:
public async Task<ActionResult> ContactUpdate(ContactViewModel update)
{
if (update != null && this.ModelState.IsValid)
{
await new ContactRepository(this).UpdateContactAsync(update);
}
return this.Json(new FormResult(this.ModelState));
}
方法UpdateContactAsync
看起来像这样:
public async Task<int> UpdateContactAsync(ContactModel update)
{
Contact c = await this.Db.GetContactAsync(id);
OtherContact oc = await this.Db.GetOtherContactAsync(id);
// do stuff with contact and other contact
// finally
return await this.accessor.Db.SaveChangesAsync();
}
上面的代码没有任何问题。
但我尝试进行一些调整以运行这两个任务,然后运行等待它们并将代码更改为以下内容:
public async Task<int> UpdateContactAsync(ContactModel update)
{
var task1 = this.Db.GetContactAsync(id);
var task2 = this.Db.GetOtherContactAsync(id);
Contact c = await task1;
OtherContact oc = await task2;
// do stuff with contact and other contact
// finally
return await this.accessor.Db.SaveChangesAsync();
}
并且此代码无法正常工作:第二个代码永远不会达到第二个任务等待并保存。根据我在DB Profiler上看到的情况,只有第一个任务正在运行。
答案 0 :(得分:1)
实体框架每次只允许一个异步请求DbContext
。