我正在编写一个与 Azure Cosmos DB 交互的应用程序。我需要在一个 session 中向 CosmosDB 提交 30,000 条记录。因为我使用.NET Core所以我不能使用BulkInsert dll。因此,我使用 Foreach 循环插入到 CosmosDB。但我发现每秒请求太多,并且超出了 CosmosDB 的 RU 限制。
foreach(item in listNeedInsert){
await RequestInsertToCosmosDB(item);
}
我想在请求数量达到 100 时暂停 foreach 循环。完成 100 个请求后。 foreach 将继续。
最佳答案
您可以对列表进行分区并等待结果:
var tasks = new List<Task>();
foreach(item in listNeedInsert)
{
var task = RequestInsertToCosmosDB(item);
tasks.Add(task);
if(tasks.Count == 100)
{
await Task.WhenAll(tasks);
tasks.Clear();
}
}
// Wait for anything left to finish
await Task.WhenAll(tasks);
每次运行 100 个任务时,代码都会等待它们全部完成,然后再执行最后一批。
关于c# - 如何在异步任务 C# 中限制每秒请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151201/