要解决并行的 HttpClient 调用抛出 500 内部服务器错误的问题,可以使用异步操作和任务并行库来处理并发请求。下面是一个使用 Task.WhenAll 方法来并行调用 HttpClient 的示例代码:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
try
{
await MakeParallelHttpClientRequests();
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
static async Task MakeParallelHttpClientRequests()
{
// 创建 HttpClient 实例
HttpClient httpClient = new HttpClient();
// 定义需要调用的 URL 列表
string[] urls = new string[]
{
"https://api.example.com/endpoint1",
"https://api.example.com/endpoint2",
"https://api.example.com/endpoint3"
};
// 创建任务列表
var tasks = new Task[urls.Length];
// 并行发送请求
for (int i = 0; i < urls.Length; i++)
{
tasks[i] = httpClient.GetAsync(urls[i]);
}
// 等待所有请求完成
Task.WhenAll(tasks);
// 处理响应
for (int i = 0; i < tasks.Length; i++)
{
var response = await tasks[i];
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response from {urls[i]}: {content}");
}
else
{
Console.WriteLine($"Error from {urls[i]}: {response.StatusCode}");
}
}
}
}
在上面的示例中,我们首先创建了一个 HttpClient 实例。然后定义了需要调用的 URL 列表,并创建了一个与 URL 数量相同的任务列表。
接下来,我们使用 for 循环并行发送 Get 请求,并将每个请求的任务存储在任务列表中。
然后,我们使用 Task.WhenAll 方法等待所有请求完成。这将确保所有请求都已完成,然后我们可以处理每个请求的响应。
最后,我们使用 for 循环遍历任务列表,并根据响应的状态码来处理每个请求的结果。
这样,就可以并行调用 HttpClient 并处理 500 内部服务器错误。
上一篇:并行导出快照