2013-12-15 2 views
0

Асинхронный модуль или обработчик завершен, пока асинхронная операция еще не выполнена.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, но не вижу ничего зарегистрированного (но я не уверен, что это связано с тем, что служба ведения журнала также использует методы асинхронной передачи для отправки отчетов о ведении журнала).

Идеи?

ответ

0

Похоже, что у вас есть несколько методов async, которые не соответствуют Task-based Asynchronous Pattern, поэтому я предполагаю, что это те методы, которые вы написали сами. Наиболее вероятной причиной этой ошибки является обертка вокруг методов EAP, возможно, в ваших методах async.

Смежные вопросы