Асинхронный модуль или обработчик завершен, пока асинхронная операция еще не выполнена.Windows Azure бросает ошибку DeadLock при вызове async/ждут от контроллера
Я только испытываю эту ошибку в Azure. Я вижу следующее сообщение об ошибке в журнале событий:
<Event>
<System>
<Provider Name="ASP.NET 4.0.30319.0" />
<EventID>1309</EventID>
<Level>2</Level>
<Task>0</Task>
<Keywords>Keywords</Keywords>
<TimeCreated SystemTime="4:13:44 PM" />
<EventRecordID>138984609</EventRecordID>
<Channel>Application</Channel>
<Computer>***********</Computer>
<Security />
</System>
<EventData>
<Data>3005</Data>
<Data>An unhandled exception has occurred.</Data>
<Data>12/15/2013 4:13:44 PM</Data>
<Data>12/15/2013 4:13:44 PM</Data>
<Data>*****************</Data>
<Data>134</Data>
<Data>9</Data>
<Data>0</Data>
<Data>/LM/W3SVC/2007260606/ROOT-25-**************</Data>
<Data>Full</Data>
<Data>/</Data>
<Data>C:\DWASFiles\Sites\*******\VirtualDirectory0\site\wwwroot\</Data>
<Data>RD00155D44211F</Data>
<Data />
<Data>1788</Data>
<Data>w3wp.exe</Data>
<Data>IIS APPPOOL\********</Data>
<Data>InvalidOperationException</Data>
<Data>An asynchronous module or handler completed while an asynchronous operation was still pending.</Data>
<Data>https://*********.azurewebsites.net:443/auth/login</Data>
<Data>/auth/login</Data>
<Data>********</Data>
<Data />
<Data>False</Data>
<Data />
<Data>IIS APPPOOL\******</Data>
<Data>52</Data>
<Data>IIS APPPOOL\*******</Data>
<Data>False</Data>
<Data />
</EventData>
</Event>
Теперь я думаю, что это были вызваны по телефону какой-то асинхронной код:
public async Task<ActionResult> Login()
{
if (Request.HttpMethod == "POST")
{
var userInputName = await session.Get<string>("UserInputName");
var userCode = Request[userInputName];
var getAuthCtxRsp = await someService.GetAuthenticationContext(new UserCodeGetAuthenticationContextRequest
{
SessionKey = await sessionResolver.GetSessionKey(),
UserCode = userCode
});
// Some stuff removed here...
if (getAuthCtxRsp.ChallengeRequired)
{
await session.Put("Challenge", getAuthCtxRsp.Challenge, TimeSpan.FromMinutes(20));
await session.Put("NextPage", "/auth/password", TimeSpan.FromMinutes(20));
return new RedirectResult("/auth/challenge/");
}
return new RedirectResult("/auth/password");
}
// More stuff happens here....
await session.Put("UserInputName", model.UserInputName, TimeSpan.FromMinutes(20));
return View(model);
}
Это, кажется, внутри если (Request.HttpMethod == "POST")
где ошибка является происходит.
Это происходит только при развертывании в Azure. Я думаю, что это связано с тем, что для сеансовой службы требуется больше времени, чем на моей локальной машине (но я не уверен).
Я также добавил глобальный обработчик ошибок в Global.asax, но не вижу ничего зарегистрированного (но я не уверен, что это связано с тем, что служба ведения журнала также использует методы асинхронной передачи для отправки отчетов о ведении журнала).
Идеи?