当执行 begin... 异步调用时,我传递的委托(delegate)在默认线程池中处理(根据文档)。
例如:System.IO.Stream.BeginRead( byte[] 缓冲区,int 偏移量,int 计数, AsyncCallback 回调,对象状态);
我怎样才能使用专用的线程池来处理异步方法?
(我知道这是可以做到的,因为 CCR(并发协调运行时)也在这样做(根据他们的文档))
最佳答案
严格来说,它是在线程池的 IO 部分处理的(异步 IO 操作有自己的一组线程,与 ThreadPool.Queue*
方法使用的线程不同)。
目前(使用已发布/支持的工具)执行此操作的唯一方法是将 stub 方法传递给 BeginRead
,将执行转发到您自己的线程池:
var async = stream.BeginRead(buffer, offset, count,
ayn => { MyThreadPool.Dispatch(() => {
// Handle completion
}}, null);
Reactive Framework Extensions (RX) 将使这更容易:为您的线程池创建一个 IScheduler
实现,但 RX 是一个 CTP,可能需要一段时间才能上线。
关于c# - 如何使异步回调在不同的线程池中处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176218/