我有这个代码
- using (var stream = new StreamWriter(request.GetRequestStream(),Encoding))
- stream.Write(body.ToString());
我需要让它异步.据我所知,这意味着我需要将对request.GetRequestStream()的调用更改为asychronous.BeginGetRequestStream().我已经看到了this示例,但无法弄清楚如何将其应用于此场景.有人可以帮忙吗?
解决方法
文档有一个很好的例子(
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream(v=vs.100).aspx):
- using System;
- using System.Net;
- using System.IO;
- using System.Text;
- using System.Threading;
- class HttpWebRequestBeginGetRequest
- {
- private static ManualResetEvent allDone = new ManualResetEvent(false);
- public static void Main(string[] args)
- {
- // Create a new HttpWebRequest object.
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/example.aspx");
- request.ContentType = "application/x-www-form-urlencoded";
- // Set the Method property to 'POST' to post data to the URI.
- request.Method = "POST";
- // start the asynchronous operation
- request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback),request);
- // Keep the main thread from continuing while the asynchronous
- // operation completes. A real world application
- // could do something useful such as updating its user interface.
- allDone.WaitOne();
- }
- private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
- {
- HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
- // End the operation
- Stream postStream = request.EndGetRequestStream(asynchronousResult);
- Console.WriteLine("Please enter the input data to be posted:");
- string postData = Console.ReadLine();
- // Convert the string into a byte array.
- byte[] byteArray = Encoding.UTF8.GetBytes(postData);
- // Write to the request stream.
- postStream.Write(byteArray,postData.Length);
- postStream.Close();
- // Start the asynchronous operation to get the response
- request.BeginGetResponse(new AsyncCallback(GetResponseCallback),request);
- }
- private static void GetResponseCallback(IAsyncResult asynchronousResult)
- {
- HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
- // End the operation
- HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
- Stream streamResponse = response.GetResponseStream();
- StreamReader streamRead = new StreamReader(streamResponse);
- string responseString = streamRead.ReadToEnd();
- Console.WriteLine(responseString);
- // Close the stream object
- streamResponse.Close();
- streamRead.Close();
- // Release the HttpWebResponse
- response.Close();
- allDone.Set();
- }