Как работает _IOCompletionCallback?
От: LWhisper  
Дата: 11.10.17 16:56
Оценка:
Всем привет!

При работе с сетевыми интерфейсами, например, посредством TcpListener, при помощи старых добрых Begin/End AcceptTcpClient, формируется довольно подозрительный стек:

System.Threading.WaitHandle.InternalWaitOne(System.Runtime.InteropServices.SafeHandle, Int64, Boolean, Boolean)
System.Threading.WaitHandle.WaitOne(Int32, Boolean)

MyListener..OnAcceptConnection(System.IAsyncResult)

System.Net.LazyAsyncResult.Complete(IntPtr)
System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
System.Net.ContextAwareResult.Complete(IntPtr)
System.Net.LazyAsyncResult.ProtectedInvokeCallback(System.Object, IntPtr)
System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
GCFrame
DebuggerU2MCatchHandlerFrame


Смущает именно PerformIOCompletionCallback.
Значит ли это, что весь оставшийся код так же будет выполнен в IOCP-треде, которых в системе не густо, и я смачно выстрелю себе в ногу этим вот WaitOne?
.net networking iocp socket async
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.