在执行begin ...异步调用时,我传递的委托在默认线程池中处理(根据文档)。
例如::System.IO.Stream.BeginRead( byte [] buffer,int offset,int count, AsyncCallback回调,对象状态);
如何才能使用专用线程池进行异步方法处理?
(我知道这可以做到,因为CCR(Concurrency Coordination Runtime)也在这样做(根据他们的文档))
答案 0 :(得分:2)
严格来说,它是在线程池的IO部分处理的(异步IO操作有自己的一组线程与ThreadPool.Queue*
方法使用的线程分开)。
关于目前执行此操作的唯一方法(使用已发布/支持的工具)将传递给BeginRead
的存根方法,该方法将执行转发到您自己的线程池:
var async = stream.BeginRead(buffer, offset, count,
ayn => { MyThreadPool.Dispatch(() => {
// Handle completion
}}, null);
Reactive Framework Extensions(RX)可以让您更轻松:为您的线程池创建一个IScheduler
实现,但RX是一个CTP,并且在任何形式的上线之前可能还需要一段时间。