我正在将使用 REST API 的 Android 应用程序移植到 WP7 平台。
在 Android 中,所有 REST API 调用都是阻塞的,我手动使用 Executors 来平衡执行网络 I/O 的线程。
在 WP7 和 Silverlight 中,我必须使用 HttpWebRequest.BeginGetResponse 并且它只有读取响应的异步变体。
是吗:
1) 使用 I/O 异步完成之类的东西,它真的是异步的吗?或2)只是在它后面的+线程内部使用阻塞读/写操作?
我正在将使用 REST API 的 Android 应用程序移植到 WP7 平台。
在 Android 中,所有 REST API 调用都是阻塞的,我手动使用 Executors 来平衡执行网络 I/O 的线程。
在 WP7 和 Silverlight 中,我必须使用 HttpWebRequest.BeginGetResponse 并且它只有读取响应的异步变体。
是吗:
1) 使用 I/O 异步完成之类的东西,它真的是异步的吗?或2)只是在它后面的+线程内部使用阻塞读/写操作?
我刚刚使用反射器检查了源代码,它是在线程池上执行的阻塞调用。
public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state)
{
this.startGetResponse();
LazyAsyncResult result = new LazyAsyncResult(this, state, callback);
if (!ThreadPool.QueueUserWorkItem(new WaitCallback(this.asyncGetResponse), result, true))
{
throw new OutOfMemoryException(SR.GetString(0x49, new object[0]));
}
return result;
}