我想对某些服务器进行异步调用,以便主线程不会停止请求。c#异步http请求
我创造了我的要求是这样的:
//Create Request
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = method;
request.ContentType = "application/XML";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(data);
request.ContentLength = bytes.Length;
try
{
using (Stream requestStream = request.GetRequestStream())
{
// Send the data.
requestStream.Write(bytes, 0, bytes.Length);
}
request.BeginGetResponse((x) =>
{
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(x))
{
if (callback != null)
{
callback(response.GetResponseStream());
}
}
}, null);
}
catch (Exception ex)
{
//TODO: Log error
}
但仍然是线程停止对该请求一段时间。特别是用
(Stream requestStream = request.GetRequestStream())
行有没有什么办法,使我们可以把它完全异步或一些其他更好的办法,使我们的主线程不会挂起该请求。
当然 - 调用[GetRequestStreamAsync(http://msdn.microsoft.com/en-us/library/system.net.webrequest.getrequeststreamasync( v = vs.110).aspx)并等待结果。 – 2014-09-30 16:17:23
如果可以的话,或者只是使用'HttpClient'和'await' - 它更加简洁。 – Luaan 2014-09-30 16:19:57
[documentation](http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx)说,如果您调用'GetRequestStream',那么您必须*调用'GetResponse'来获取响应。如果你想要一个使用'BeginGetResonse'的异步响应,那么你必须*调用'BeginGetRequeststream'来获取请求流。 – 2014-09-30 19:05:32