使用 .NET Framework 的批处理异步 API 调用

Batched async API calls using .NET Framework

提问人:papfan 提问时间:9/13/2023 最后编辑:marc_spapfan 更新时间:9/14/2023 访问量:83

问:

使用 .NET Framework 中的 C# 批量对外部 API 进行异步调用的推荐方法是什么?如果调用次数超过特定数量,外部 API 会限制请求。

如何批量调用外部 API,然后等待第一批完成,或者等待 x 秒再进行第二批调用?

这样做的原因是为了避免外部 API 限制我们的调用。我知道我可以从外部 API 响应标头中查看 retry-after 标头,然后在受到限制时重试请求,但在这种特殊情况下,我希望避免由于特定原因而受到限制。

例如,假设我想对外部 API 进行总共 100 次调用。我想将它们分 5 批处理成 20 个 API 调用,这样每批 20 个 API 调用仅在前一批完成后或 x 秒后向外部 API 发出请求。

我试过了,但它一次调用了所有 100 个 API。由于我希望对外部 API 的调用是异步的,因此我不想使用,因为它是同步的,在 .NET 框架上不受支持。Task.WhenAllParallel.ForEachParallel.ForEachAsync

我能想到的唯一解决方案是一次使用并发出 20 个请求,然后执行然后重复调用,直到所有 100 个请求都得到处理。Task.WhenAllTask.Delay()Task.WhenAll

在 .NET Framework 中是否有更好的方法来处理此问题?

C# 异步 任务并行库 parallel.foreach

评论

0赞 Theodor Zoulias 9/13/2023
您可以在此答案中找到 .NET Framework 的实现。Parallel.ForEachAsync
0赞 Theodor Zoulias 9/15/2023
可能的重复项:如何限制并发异步 I/O 操作的数量?
1赞 papfan 9/15/2023
感谢您的建议

答: 暂无答案