c# - Windows Phone C#异步获取https请求

标签 c# multithreading windows-phone-7 https

我想通过 https 实现异步获取请求。这是分离 UI 和请求线程所必需的。这段代码可以找到,但我不确定它是否真的是异步的。请提供此代码的性能评论。

public void authHttp()
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("uri");
        request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
    }

    private void ReadWebRequestCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
        HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

        using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
        {
            string results = httpwebStreamReader.ReadToEnd();
            //TextBlockResults.Text = results; //-- on another thread!
            //Dispatcher.BeginInvoke(() => TextBlockResults.Text = results);
        }
        myResponse.Close();
    }

最佳答案

BeginGetResponse(我假设它是在 UI 线程上调用的)是异步的。这将在与 UI 线程不同的线程上调用 ReadWebRequestCallbackBeginGetResponse 使用异步 UI,因此它可能不使用“线程”来执行 IO 工作——这可能会卸载到硬件。但是,它确实使用另一个线程池线程来调用您的回调。

在回调中继续进行异步操作也是一个好主意。 ReadToEnd 是同步的。只要您阻止了用于 session 的异步 IO 子系统的线程,它就可能被阻止执行任何其他异步 IO,直到您取消阻止并从回调中返回。如果您使用的是 .NET 4.5,请查看 StreamReader.ReadtoEndAsync。如果没有,您将不得不使用下拉到 Stream.BeginRead 并循环直到收到所有数据。

关于c# - Windows Phone C#异步获取https请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907529/

相关文章:

c# - 使用 Javascript 从 ASP.NET FileUpload 控件加载图像

接口(interface)实现上的 c# 行为

c# - MVVM - 是否有开源 View Model 基类?

c++ - 具有 DirectX 桌面框架的消费者-生产者线程

c# - 如何在任何文化中使用 MediaLibrary 获取相机胶卷图片

c# - 如何使用 XmlSerializer 来处理不同的命名空间版本?

c# - C# lock 关键字的使用

ruby-on-rails - 如何获得最佳性能 rails 请求并行 sidekiq worker

c# - WP7图像处理API

windows-phone-7 - Google Adsense 广告未在 Windows 和 Blackberry Phone 上显示?