HttpWebRequest.BeginGetResponse是否在WP7或Silverlight中的线程池上使用阻塞GetResponse?

HttpWebRequest.BeginGetResponse是否在WP7或Silverlight中的线程池上使用阻塞GetResponse?,silverlight,windows-phone-7,http,rest,networking,Silverlight,Windows Phone 7,Http,Rest,Networking,我正在将使用RESTAPI的Android应用程序移植到WP7平台 在Android中,所有RESTAPI调用都是阻塞的,我手动使用执行器来平衡执行网络I/O的线程 在WP7和Silverlight中,我必须使用HttpWebRequest.BeginGetResponse,它只有读取响应的异步变体 是: 1) 使用类似于I/O异步完成的东西,它真的是异步的吗? 或 2) 只是在它后面的+线程中使用阻塞读/写操作?我刚刚使用Reflector检查了源代码,这是在线程池上执行的阻塞调用 publi

我正在将使用RESTAPI的Android应用程序移植到WP7平台

在Android中,所有RESTAPI调用都是阻塞的,我手动使用执行器来平衡执行网络I/O的线程

在WP7和Silverlight中,我必须使用HttpWebRequest.BeginGetResponse,它只有读取响应的异步变体

是:

1) 使用类似于I/O异步完成的东西,它真的是异步的吗? 或
2) 只是在它后面的+线程中使用阻塞读/写操作?

我刚刚使用Reflector检查了源代码,这是在线程池上执行的阻塞调用

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;
}

出于好奇,你为什么这么问?这有关系吗?正如我之前所说:我正在移植现有的Android应用程序代码,它使用blocking reading+线程池来平衡网络请求,我想将Java的ThreadPoolExecutor移植到WP7,并使用我的Java代码进行最小的更改,但如果WP7的异步I/O方法不是真正的异步(使用隐藏的blocking reading+线程)->移植的WP7应用程序可能存在我想要避免的性能问题(将有两个线程同时运行,而不是一个挂起的REST方法运行一个线程)。为手机应用程序拥有大量线程是一种糟糕的做法,即使它们是空闲的。谢谢你的解释。你能告诉我你是如何得到这些反编译的源代码的吗?当我反编译Silverlight程序集时,我只在方法中看到存根(比如throw NotImplementedException())@gorecode:Will在“那些程序集只包含元数据”部分是正确的。不幸的是,完整的程序集不能直接与SDK一起使用(它直接存储在emulator映像中)。可以使用转储工具从图像中提取部件。你可以在Xda开发者论坛上找到更多信息。我不能百分之百确定在真实设备上是否如此。Emulator可以使用“定制”构建。我将尝试在真实设备上进行手动测试,并在这里发布答案。