调用和管理多个http请求响应的最佳方式
本文关键字:响应 最佳 方式 请求 http 管理 调用 | 更新日期: 2023-09-27 18:29:02
我有一个挑战,我需要调用许多http请求并处理它们中的每一个。如何做到这一点,我不想等待从其中一个获得响应,然后调用下一个,如何为进程响应分配方法(如回调)。如何定义回调并分配给每个回调?
您需要的是一个异步编程模型,在该模型中创建async任务,并在之后使用await关键字进行响应。
因此,从本质上讲,您并不是在等待第一个异步调用完成,您只需要根据自己的意愿启动尽可能多的异步任务,并等待只有在需要响应以继续执行程序逻辑时才得到响应。
有关更多详细信息,请查看以下内容:https://msdn.microsoft.com/en-us/library/hh696703.aspx
1)您可以调用该normaly(noneasync):
public string TestNoneAsync()
{
var webClient = new WebClient();
return webClient.DownloadString("http://www.google.com");
}
2) 可以使用APM(异步):
private void SpecAPI()
{
var req = (HttpWebRequest)WebRequest.Create("http://www.google.com");
//req.Method = "HEAD";
req.BeginGetResponse(
asyncResult =>
{
var resp = (HttpWebResponse)req.EndGetResponse(asyncResult);
var headersText = formatHeaders(resp.Headers);
Console.WriteLine(headersText);
}, null);
}
private string formatHeaders(WebHeaderCollection headers)
{
var headerString = headers.Keys.Cast<string>()
.Select(header => string.Format("{0}:{1}", header, headers[header]));
return string.Join(Environment.NewLine, headerString.ToArray());
}
3) 您可以创建一个回调并对其进行签名,EAP。(async.net 2):
public void EAPAsync()
{
var webClient = new WebClient();
webClient.DownloadStringAsync(new Uri("http://www.google.com"));
webClient.DownloadStringCompleted += webClientDownloadStringCompleted;
}
void webClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
// use e.Result
Console.WriteLine("download completed callback.");
}
4) 您可以使用更新的方式TAP、cleare方式(c#5)。建议:
public async Task<string> DownloadAsync(string url)
{
var webClient = new WebClient();
return await webClient.DownloadStringTaskAsync(url);
}
public void DownloadAsyncHandler()
{
//DownloadAsync("http://www.google.com");
}
这个解决方案中的线程不是一个好方法。(许多挂起调用http请求的线程!)