首页 > WP进行Http通信,异步调用怎么返回值?

WP进行Http通信,异步调用怎么返回值?

 private string GetText()
        {
            string resultString = string.Empty;
            HttpWebRequest request =            HttpWebRequest.CreateHttp("http://www.baidu.com");
            request.Method = "GET";
            request.BeginGetResponse((IAsyncResult result) =>
                {
                    HttpWebRequest webRequest = result.AsyncState as HttpWebRequest;
                    HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(result);
                    Stream streamResult = webResponse.GetResponseStream();
                    StreamReader reader = new StreamReader(streamResult);

                    //获取的返回值
                    resultString = reader.ReadToEnd();
                    streamResult.Close();
                    reader.Close();
                }, request);

            return resultString;
        }

怎么把resultString返回给调用函数?


目前我找到了解决该问题的方案:

   private string gethttp()
        {
            string res = "";
            Boolean isfinish = false;
            WebRequest request = HttpWebRequest.Create("http://www.baidu.com");
            request.BeginGetResponse((IAsyncResult result) =>
            {
                HttpWebRequest webrequest = (HttpWebRequest)(result.AsyncState);
                WebResponse response = request.EndGetResponse(result) as HttpWebResponse;
                if (response != null)
                {
                    Stream responseStream = response.GetResponseStream();
                    using (StreamReader streamReader = new StreamReader(responseStream))
                    {   
                        res = streamReader.ReadToEnd();
                    }

                }
                    isfinish = true;
            }, request);
            //等待异步调用完成
            while (isfinish != true) { ;}
            return res;
        }

 public  async Task<string> GetStr()
        {
            var task = Task<string>.Factory.StartNew(() => gethttp());
            await task;
            return task.Result;
}

//下面就可以直接调用了

string str = await  GetStr();


异步调用没法将返回值直接返回给调用函数,只有通过另外的回调函数传递结果

【热门文章】
【热门文章】