Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Phone C#异步获取https请求_C#_Multithreading_Windows Phone 7_Https - Fatal编程技术网

Windows Phone C#异步获取https请求

Windows Phone C#异步获取https请求,c#,multithreading,windows-phone-7,https,C#,Multithreading,Windows Phone 7,Https,我想通过https实现异步get请求。这是分离UI和请求线程所必需的。这段代码可以找到,但我不确定它是否真的是异步的。请提供此代码的性能批评者 public void authHttp() { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("uri"); request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallb

我想通过https实现异步get请求。这是分离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();
    }

是的,它是异步执行的。您可以通过调试、在ReadWebRequestCallback方法中放置断点以及在authHttp方法中跳过(F10)BeginGetResponse调用来确认。当您执行此操作时,您会注意到未命中断点。稍后会命中它。

BeginGetResponse
(我假设它是在UI线程上调用的)是异步的。这将在与UI线程不同的线程上调用
ReadWebRequestCallback
BeginGetResponse
使用异步UI,因此它可能不会使用“线程”来完成IO工作,这可能会被转移到硬件上。但是,它确实使用另一个线程池线程来调用回调

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