我想對某些服務器進行異步調用,以便主線程不會停止請求。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