代码之家  ›  专栏  ›  技术社区  ›  Toad

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

  •  2
  • Toad  · 技术社区  · 15 年前

    当开始的时候…异步调用,我传递的委托在默认线程池中处理(根据文档)。

    例如:system.io.stream.beginread( 字节[]缓冲区,int偏移量,int计数, 异步回调,对象状态);

    我怎样才能使用一个专用的线程池来处理异步方法?

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Richard    15 年前

    严格地说,它是在线程池的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,可能需要一段时间才能实现任何形式的上线。