如何在不同的线程池中处理异步回调?

时间:2010-02-01 11:13:55

标签: c# .net asynchronous delegates threadpool

在执行begin ...异步调用时,我传递的委托在默认线程池中处理(根据文档)。

例如:

:System.IO.Stream.BeginRead(    byte [] buffer,int offset,int count,    AsyncCallback回调,对象状态);

如何才能使用专用线程池进行异步方法处理?

(我知道这可以做到,因为CCR(Concurrency Coordination Runtime)也在这样做(根据他们的文档))

1 个答案:

答案 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,并且在任何形式的上线之前可能还需要一段时间。