在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
,但我不会在同一个套接字上并发地调用它两次。对原因有什么想法吗?
在非常努力地尝试让IO-completion方法工作之后,我最终放弃了,只编写了自己的线程来调用send和receive的同步版本。从那以后我没有遇到过任何问题。
我有一些c++代码使用io补全,甚至在高容量设置中,我从来没有遇到过这个问题。
所以在我看来很清楚,c#的io完成实现是有缺陷的,它不是反恶意软件,防火墙,或任何(非微软)垃圾软件。