gpt4 book ai didi

c# - 并行/顺序调用 httpclient 的最佳实践是什么,具有非常好的性能并且不会丢失数据

转载 作者:行者123 更新时间:2023-12-03 00:23:02 25 4
gpt4 key购买 nike

我们需要执行批量 API 请求(超过 1000 次调用)并将响应数据保存在数据库中。

最初我们需要 10-20 个 API 调用。对于这些请求,我们使用简单的“for 循环”和 HTTPClient 的单个实例来获取数据并将其保存到数据库。

后来我们得到了 100-200 个 API 调用的要求。对于这些请求,我们使用 Parallel.ForEach 和单个 HTTPClient 实例,但我们遇到了套接字问题。所以我们为每个请求创建了新实例。即使这种方法也会导致服务器出现问题。

现在的要求是执行 1000 多个 API 调用。

对于使用“await”的单个 HTTPClient 实例,需要数小时才能完成操作。

是否有任何方法或良好实践可以在 C# 中以非常好的性能执行 1000 多个 api 调用并且不会丢失数据?

最佳答案

您可以尝试将评论中的解决方案与 when all 结合起来: https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.whenall?view=net-5.0

private static HttpClient Client = new HttpClient();
public static async Task Main(string[] args)
{
var tasks = new List<Task>();
Console.WriteLine("Starting connections");
for(int i = 0; i<10; i++)
{
tasks.Add(Client.GetAsync("http://aspnetmonsters.com"))
Console.WriteLine(result.StatusCode);
}
Task t = Task.WhenAll(tasks);
try {
t.Wait();
}
catch {}
Console.WriteLine("Connections done");
Console.ReadLine();
}

关于c# - 并行/顺序调用 httpclient 的最佳实践是什么,具有非常好的性能并且不会丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65113595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com