2013-10-16 10 views
5

Mam projekt sieci Web .NET 4.0 i używam Microsoft.Bcl.Async do obsługi funkcji async/await. Zauważyłem, że w środowisku produkcyjnym proces roboczy usług IIS nieustannie zawiesza się z powodu wyjątku NullReferenceException, który jest zgłaszany pod adresem System.Runtime.CompilerServices.AsyncServices.<ThrowAsync>b__1(). Wygląda na to, że wyjątek został zgłoszony w innym miejscu w moim kodzie i został ponownie zgłoszony przy użyciu metody AsyncServices.ThrowAsync(). Niestety, wszystkie szczegóły wyjątku (w tym oryginalny ślad stosu) są tracone, więc nie wiem, gdzie pierwotnie został zgłoszony wyjątek. Co więcej, próbowałem złapać ten wyjątek za pomocą zdarzeń AppDomain.CurrentDomain.UnhandledException i TaskScheduler.UnobservedTaskException, ale zdarzenia te nigdy nie są uruchamiane.NullReferenceException w System.Runtime.CompilerServices.AsyncServices. <ThrowAsync> b__1()

Są wszystkie szczegóły błędu mam (z Eventlog):

Exception: System.NullReferenceException 

Message: Object reference not set to an instance of an object. 

StackTrace: at System.Runtime.CompilerServices.AsyncServices.<ThrowAsync>b__1(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 

Brak widocznych miejscach w moim kodu, który może rzucić wyjątek ten proces i wywala bez wyjścia.

Jak mogę to debugować? Czy są jakieś sposoby na znalezienie źródła tego wyjątku?

+0

Może się to zdarzyć, jeśli "poczekasz" null "Zadanie". – SLaks

+0

Czy ten wyjątek może spowodować awarię IIS 8.5? – dizel3d

Odpowiedz

3

Użytkownik nie może używać Microsoft.Bcl.Async na IIS; to jest entirely unsupported. Przepraszam.

Podsumowując od odwołania blogu: zachowanie async/czekają jest niezdefiniowane w ASP.NET chyba ustawienie aspnet:UseTaskFriendlySynchronizationContext aplikacja jest ustawiona na true lub atrybut httpRuntime.targetFramework jest ustawiony na 4.5.

Te opcje nie mają wpływu na środowisko wykonawcze ASP.NET 4.

+0

Mam migrowany mój projekt do .NET4.5 i wydaje się, że to rozwiązuje problem. Wielkie dzięki! – Albert

+0

@Stephen Otrzymuję ten sam problem w projekcie usługi Windows. Wszystkie pozostałe warunki są takie same. Nadal. Czy istnieje sposób na uzyskanie lepszych informacji o StackTrace bez aktualizowania do .Net 4.5. – rudimenter

+0

@rudimenter: Możesz wypróbować moją [biblioteka AsyncDiagnostics] (http://www.nuget.org/packages/Nito.AsyncEx.AsyncDiagnostics/). –

Powiązane problemy