【发布时间】:2009-04-10 17:19:29
【问题描述】:
我有一个多线程 .NET 应用程序,它使用异步 I/O 和 AsyncCallbacks 来处理 I/O 完成。在极少数情况下,应用会失败并出现以下异常:
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)
MyApp.cs 中的第 123 行是 AsyncCallback 的第一个可执行行,它位于 try/catch(异常 ex)内,但未执行 catch。
.NET Framework 是否在异常发生的位置上对我撒谎?异常是否真的发生在我无法捕捉到的异步地狱中?为什么我无法捕捉到这个异常?
【问题讨论】:
-
这是一个非常古老的问题的变体:“上帝能提出一个他无法捕捉的异常吗?”
-
我预计不会发生这种情况,至少如果堆栈跟踪显示异常源自您的方法时不会发生。你能发布一些重现问题的代码吗?另外,你检查过 InnerExceptions 吗?
-
我无法发布重现问题的代码,因为我无法在异步 I/O 期间引发 AritmeticException(或任何其他异常)。我引发的任何异常都会按预期捕获。没有内部异常。
标签: c# .net exception asynchronous