您可以通过传递一个委托(作为异步“状态”参数的一部分)来需要调用。然后在EndGetResponseStream之后做必要的事情,然后使用任何您需要的参数调用此委托。
个人建议,由于您正在转向aysnc编程模型(我假设是为了获得更好的性能),我强烈建议您将工作流程也转换为异步。这种模式允许您在结果到达并尽可能快地处理结果而不会发生任何阻塞。
编辑
我的博客上有一篇文章
HttpWebRequest - 异步编程模型/Task.Factory.FromAsyc
关于这个主题。我目前正在撰写它,但我已经提供了一个类,我认为您可以在您的情况下使用。根据您的需要查看GetAsync方法或PostAsync方法。
public static void GetAsyncTask(string url, Action<HttpWebRequestCallbackState> responseCallback,
string contentType = "application/x-www-form-urlencoded")
注意responseCallback参数了吗?那是我之前提到的委托。以下是调用它的示例(我展示的是PostAsyn()方法)
var iterations = 100;
for (int i = 0; i < iterations; i++)
{
var postParameters = new NameValueCollection();
postParameters.Add("data", i.ToString());
HttpSocket.PostAsync(url, postParameters, callbackState =>
{
if (callbackState.Exception != null)
throw callbackState.Exception;
Console.WriteLine(HttpSocket.GetResponseText(callbackState.ResponseStream));
});
}
循环可以是你的url集合。在GET请求的情况下,你不需要发送任何(POST)参数,回调函数是我写到控制台的lambda表达式。在这里,你可以做你需要做的事情,或者你可以发送一个委托,以便响应处理是在“其他地方”完成的。
此外,回调方法是一个
Action<HttpWebRequestCallbackState>
在这里,HttpWebRequestCallbackState
是一个自定义类,您可以修改它以包含您需要的任何信息。或者您也可以修改签名为 Action
。