在IOCompletionCallback中获取AccessViolationException

本文关键字:AccessViolationException 获取 IOCompletionCallback | 更新日期: 2023-09-27 18:19:10

我在应用程序启动时得到以下异常:

System.AccessViolationException
   at System.Threading.Overlapped.get_iocbHelper()
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

这是整个调用栈。只有二十分之一的概率在应用程序启动时运行。我确实在套接字代码中使用了IOCompletion。我想这与此有关。然而,当我调用Socket.ReceiveFromAsync时,为什么这个异常不显示?我有很多套接字同时调用ReceiveFromAsync,但我不会在同一个套接字上并发地调用它两次。对原因有什么想法吗?

在IOCompletionCallback中获取AccessViolationException

在非常努力地尝试让IO-completion方法工作之后,我最终放弃了,只编写了自己的线程来调用send和receive的同步版本。从那以后我没有遇到过任何问题。

我有一些c++代码使用io补全,甚至在高容量设置中,我从来没有遇到过这个问题。

所以在我看来很清楚,c#的io完成实现是有缺陷的,它不是反恶意软件,防火墙,或任何(非微软)垃圾软件。