【发布时间】:2015-05-07 22:37:22
【问题描述】:
从 Beta3 升级到 Beta4 后,我现在在调用 TryUpdateModelAsync 时遇到了死锁(网站无限期挂起)
public ActionResult Edit(ContactModel contactModel)
{
var contact = db.Contact.Find(contactModel.ContactId);
if (ModelState.IsValid)
{
TryUpdateModelAsync(contact);
var result = db.SaveChanges(() => { });
if (result.Success)
return RedirectToAction("Details", "Client", new { id = contact.ClientId });
}
return View(contactModel);
}
上面的原始代码是从 MVC 5 移植的,所以我只是想同步运行。像这样将控制器方法转换为异步后,我得到了相同的结果
public async System.Threading.Tasks.Task<ActionResult> Edit(ContactModel contactModel)
{
var contact = db.Contact.Find(contactModel.ContactId);
if (ModelState.IsValid)
{
var updateResult = await TryUpdateModelAsync(contact);
var result = db.SaveChanges(() => { });
if (result.Success)
return RedirectToAction("Details", "Client", new { id = contact.ClientId });
}
return View(contactModel);
}
我快速浏览了示例项目,但找不到此方法的任何用法,有人有工作示例吗?或者知道为什么会这样?
【问题讨论】:
-
为什么第二个不能“正常工作”?
-
@StephenCleary SaveChanges 不会在模型更新之前运行吗?
-
不,await之后的一切都是任务的继续。
-
有道理,为了清楚起见,我将编辑问题以删除该评论
-
问题在哪里?您是否尝试过闯入流程?
标签: c# asp.net-core asp.net-core-mvc