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

标签 c# .net asynchronous delegates threadpool

当执行 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/

相关文章:

c# - 使用 HttpClient 的进度信息

c# - 带有部分 View 的 ajax 选项卡式 Pane 中的 IpagedList 无法正确呈现

c# - 在 WPF 中使用 Datagrid 使用复选框进行多项选择

c# - GetHashCode 和 Equals 在 System.Attribute 中实现不正确?

c# - 具有泛型类型的接口(interface)用作第二个接口(interface)中的泛型类型

.net - 这是什么错误? Net.HttpWebRequest.SetAndOrProcessResponse 中的 System.Net.InternalException

C# 将 UTC int 转换为 DateTime 对象

c# - MS Dynamics CRM 中的客户联系关系

swift - 实现异步线程(使用 Swift 的 Xcode)

javascript - 使用 `localStorage` 时,数组不会存储在 `callback` 中