2013-10-16 61 views
5

Ho un progetto Web .NET 4.0 e utilizzo Microsoft.Bcl.Async per supportare la funzione asincrona/attesa. Ho notato che in ambiente di produzione il processo di lavoro IIS si interrompe continuamente a causa di NullReferenceException che viene lanciato a System.Runtime.CompilerServices.AsyncServices.<ThrowAsync>b__1(). Sembra che l'eccezione sia stata lanciata in un altro posto nel mio codice ed è stata rimandata al metodo AsyncServices.ThrowAsync(). Sfortunatamente tutti i dettagli delle eccezioni (inclusa la traccia dello stack originale) vanno persi, quindi non so dove sia stata originariamente lanciata l'eccezione. Inoltre, ho cercato di rilevare questa eccezione utilizzando gli eventi AppDomain.CurrentDomain.UnhandledException e TaskScheduler.UnobservedTaskException ma questi eventi non vengono mai attivati.NullReferenceException in System.Runtime.CompilerServices.AsyncServices. <ThrowAsync> b__1()

Ci sono tutti i dettagli di errore che ho (da 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() 

ci sono posti evidenti nel mio codice che potrebbe gettare questo di eccezione e di processo si blocca, senza alcun output.

Come si esegue il debug di questo? Ci sono modi per trovare la fonte di questa eccezione?

+0

Questo potrebbe accadere se si "attende" un "task" nullo. – SLaks

+0

Questa eccezione può causare l'arresto di IIS 8.5? – dizel3d

risposta

3

non è possibile utilizzare Microsoft.Bcl.Async su IIS; è entirely unsupported. Scusate.

Per riassumere dal post sul blog di riferimento: il comportamento di async/attendono di non è definito in ASP.NET meno che l'impostazione aspnet:UseTaskFriendlySynchronizationContext applicazione è impostato su true o l'attributo httpRuntime.targetFramework è impostato su 4.5.

Queste opzioni non influiscono sul runtime di ASP.NET 4.

+0

Ho migrato il mio progetto in .NET4.5 e questo sembra risolvere il problema. Molte grazie! – Albert

+0

@Stephen Ricevo lo stesso problema in un progetto di servizio di Windows. Tutte le altre condizioni sono le stesse. Ancora. C'è un modo per ottenere informazioni StackTrace migliori senza l'aggiornamento a .Net 4.5. – rudimenter

+0

@rudimenter: puoi provare la mia [libreria AsyncDiagnostics] (http://www.nuget.org/packages/Nito.AsyncEx.AsyncDiagnostics/). –