Ich habe eine .NET-Anwendung mit mehreren Threads, die asynchrone E/A- und AsyncCallbacks verwendet, um die E/A-Vervollständigungen zu verarbeiten. In seltenen Fällen wird die App mit einer Ausnahme fehlschlagen wie:Kann ein asynchroner E/A eine nicht behebbare Ausnahme auslösen?
Arithmetic operation resulted in an overflow.
at MyApp.ReadComplete(IAsyncResult ar) in c:\MyApp.cs:line 123
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.ContextAwareResult.CompleteCallback(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
Linie 123 in MyApp.cs ist die erste ausführbare Zeile des AsyncCallback und es ist innerhalb eines try/catch (Exception ex), aber der Haken ist, NICHT ausgeführt werden.
Liegt mir das .NET Framework vor, wo die Ausnahme aufgetreten ist? Ist die Ausnahme tatsächlich in der asynchronen Unterwelt aufgetreten, wo ich sie nicht finden kann? Warum kann ich diese Ausnahme nicht verstehen?
Dies ist eine Variante einer sehr alten Frage: "Kann Gott eine Ausnahme aufstellen, die er nicht fangen kann?" –
Ich würde nicht erwarten, dass das passieren könnte, zumindest nicht, wenn der Stack-Trace zeigt, dass die Ausnahme in Ihrer Methode entstanden ist. Können Sie Code posten, der das Problem reproduziert? Haben Sie auch InnerExceptions überprüft? – driis
Ich kann keinen Code posten, der das Problem reproduziert, da ich keine AritmeticException (oder eine andere Ausnahme) während der asynchronen E/A auslösen kann. Jede Ausnahme, die ich induziere, wird wie erwartet gefangen. Es gibt keine inneren Ausnahmen. –