喜欢这个。
public ActionResult SomeAction()
{
var foo = SomeMethodAsync().Result;
if (foo)
Respository.Update(); //Repository pattern, calls save changes on my ObjectContext.
}
控制的顺序是任意的,取决于很多东西,Web服务器,断点等。由于Controller中的以下内容,上面的内容会间歇地抛出Repository.Update()。
protected override void Dispose(bool disposing)
{
Repository.Dispose();
}
因此,根据是否已调用SomeMethodAsync,调用Dispose()并及时处理ObjectContext以便需要它。显然控制器本身没有处理,但有些事情正在为它做准备。
我可以避免这种情况吗?
我正在向您展示以下内容,因此您可以看到ConfigureAwait(false),它可能与也可能没有关系。如果我删除它,那么该方法有可能根本无法完成 - 在生产中,大多数时候都没有。
public async Task<bool> SomeMethodAsync()
{
return await IOMethodAsync().ConfigureAwait(false);
}
Preemtively,我可以让动作异步吗?是的,我将在其中一天,在应用范围内,在受控阶段。请告诉我,我是否可以期待我的问题消失。
为什么我在Dispose()中处理ObjectContext?我不知道,我已经忘记了。也许它不再需要了。但是我想保持这种状态,直到我知道,因此问题。
答案 0 :(得分:1)
我遇到了这个问题,整整一天都困扰着我。我终于意识到我ActionInvoker
中的ControllerFactory
正在继承ControllerActionInvoker
。当我将其更改为AsyncControllerActionInvoker
时,问题就消失了。