【问题标题】:how can I make asynchronous callbacks be processed in a different threadpool?如何在不同的线程池中处理异步回调?
【发布时间】:2011-01-11 16:25:20
【问题描述】:

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

例如:System.IO.Stream.BeginRead( byte[] 缓冲区,int 偏移量,int 计数, AsyncCallback 回调,对象状态);

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

(我知道可以这样做,因为 CCR(并发协调运行时)也在这样做(根据他们的文档))

【问题讨论】:

    标签: c# .net asynchronous delegates threadpool


    【解决方案1】:

    严格来说,它是在线程池的 IO 部分处理的(异步 IO 操作有自己的一组线程,与 ThreadPool.Queue* 方法使用的线程分开)。

    目前(使用已发布/支持的工具)执行此操作的唯一方法是将存根方法传递给BeginRead,将执行转发到您自己的线程池:

    var async = stream.BeginRead(buffer, offset, count,
                                ayn => { MyThreadPool.Dispatch(() => {
                                  // Handle completion
                                }}, null);
    

    响应式框架扩展 (RX) 将使这更容易:为您的线程池创建一个 IScheduler 实现,但 RX 是一个 CTP,并且可能需要一段时间才能实现任何形式的上线。

    【讨论】:

    • 所以我理解正确:.Net 线程池用于瞬间传递呼叫?
    • 是的。我认为不可能避免这种情况,因为异步 IO 使用 .NET FX IO Completion 端口,该端口是 IO 线程池的服务器。
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2012-05-14
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多