在哪个线程的上下文中执行.NET 3.5 SendAsync和ReceiveAsync的回调?

SendAsync和ReceiveAsync是否使用IO完成端口? 最佳答案 好吧,IO完成端口通过将完成例程作为APC挂起到ThreadPool中的工作线程(SocketAsyncEventArgsPool)来工作.因此,上下文是一些创建的工作线程.

至于你的实际问题,我无法想象他们会使用除I / O完成端口之外的任何东西,否则它将是非常低效的;然而,这主要是一个实现细节 – 无论他们如何做,实际情况是通知是在任意的上下文中(即你对你所在的线程一无所知),所以你需要在一个线程中做事 – 在完成例程中安全的方式.

为了获得良好的可伸缩性,我还尝试最小化在此例程中完成的工作,尽可能快地完成I / O – 如果必须执行其他工作,请使用可以对实际计算进行排队的单独线程池.

点赞