【发布时间】:2017-03-15 10:31:37
【问题描述】:
我有一个方法
private string MakeRequest
之前给我返回了一个字符串,但现在我在这个方法中有一个异步操作。
request.BeginGetRequestStream(GetRequestStreamCallback, request);
private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
var request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
var postStream = request.EndGetRequestStream(asynchronousResult);
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(request.Connection);
// Write to the request stream.
postStream.Write(byteArray, 0, request.Connection.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request.BeginGetResponse(GetResponseCallback, request);
}
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
var request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
var response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
var streamResponse = response.GetResponseStream();
using (var streamRead = new StreamReader(streamResponse))
{
var responseString = streamRead.ReadToEnd();
var trimResponseString = responseString.Trim(); // I need this string to return from MakeRequest
// Close the stream object
streamResponse.Close();
streamRead.Close();
// Release the HttpWebResponse
response.Close();
allDone.Set();
}
}
如何将上次回调的字符串返回给 MakeRequest?
【问题讨论】:
-
您是否考虑过改用任务?
WebRequest.GetRequestStreamAsync返回一个任务,你可以等待它。不知道你从哪里调用,但如果它的 WPF、WinForms、asp.net 你的条目可以标记为async,并返回某种形式的Task。然后您可以等待GetRequestStreamAsync -
@Igor,我该怎么做?我以前从未这样做过。
-
您使用的是什么版本的 .NET?现在有很多更简单的方法可以做到这一点。
-
@JLRishe .NET 4.5
-
@Ekaterina - 你的切入点是什么(即你从什么地方调用它)?控制台应用程序、wpf、winforms、mvc、asp.net,还有什么?
标签: c# .net asynchronous callback