Jus*_*gin 1 c# asynchronous task httprequest
我有两种方法:第一种方法HTTP GET在一个地址上发送请求,第二种方法多次调用(因此,它向多个IP发送请求).这两种方法都是异步的,因此在请求远程处理时它们不会阻止代码执行.问题是,由于我的C#知识不足,我不知道如何同时发送所有请求,而不是一个接一个地发送(我的代码就是这样).那是我的代码:
public static async Task<string> SendRequest(Uri uri)
{
using (var client = new HttpClient())
{
var resp = await client.GetStringAsync(uri).ConfigureAwait(false);
return resp;
}
}
public static async Task<string[]> SendToAllIps(string req)
{
string[] resp = new string[_allIps.Length];
for (int i = 0; i < _allIps.Length; i++)
{
resp[i] = await SendRequest(new Uri(_allIps[i] + req));
}
return resp;
}
Run Code Online (Sandbox Code Playgroud)
如何在SendToAllIps不等待以前的任务结果的情况下发送请求?SendToAllIps所有请求完成后,还必须返回一组响应.据我所知,这可以通过Task.WaitAll完成,但如何在这种特殊情况下使用它?
您可以Task.WhenAll用来等待任务集合:
public static async Task<string[]> SendToAllIps(string req)
{
var tasks = _allIps.Select(ip => SendRequest(new Uri(ip + req)));
return await Task.WhenAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)