我有一个.NET Windows服务,它使用BeginRead / EndRead异步I / O范例实现套接字服务器 . 现在这个套接字代码需要调用一些async / Task / await异步代码 .
我一直在使用Nito.AsyncEx库's AsyncContext class' Run方法,但我对是否从EndRead调用它会阻止,将工作线程保持为人质有所保留 . 我得到my earlier question的建议是使用Task.Run而不是Nito.AsyncEx 's AsyncContext.Run. This submits the call into the async / await code and returns immediately. It occurred to me that under load that there' s没有对客户端进行回击以防止请求泛滥线程池 .
我会重新问我关于Nito.AsyncEx的AsyncContext.Run原题:是否持有线程,它被称为上(池线程调用我的套接字的EndRead回调)为人质,或者它腾出线程,而异步I / O它的调用是在后台发生的?
如果Nito.AsyncEx的AsyncContext.Run真正阻止,那么Task.Run似乎是我唯一的选择 . 关于如何回击客户端请求以防止线程池耗尽的任何建议?