【发布时间】:2019-05-15 14:00:12
【问题描述】:
我正在编写一个与 Azure Cosmos DB 交互的应用程序。我需要在一个会话中向 CosmosDB 提交 30,000 条记录。因为我使用了 .NET Core,所以我不能使用 BulkInsert dll。所以,我使用 Foreach 循环插入到 CosmosDB。但是我看到每秒请求太多,并且 CosmosDB 超出了 RU 限制。
foreach(item in listNeedInsert){
await RequestInsertToCosmosDB(item);
}
我想在请求数达到 100 时暂停 foreach 循环。完成 100 个请求后。 foreach 将继续。
【问题讨论】:
-
await等待已经执行的任务。它不会启动它们或控制它们的执行。 -
如果您想将插入次数限制为每秒 N 次,请在循环中添加延迟,以确保使用
await Task.Delay(...);每秒最多可以进行 N 次调用。 -
您能否以编程方式知道插入是否完成?如果你这样做了,你应该做的是拿出一个计数器,然后当它达到 100 个请求时,等待插入完成然后继续
-
你能定义一个约束吗 - 要么我只能每秒启动 n 个请求,和/或只有 n 个请求可以在给定的情况下执行时间?无论是什么约束导致您这样做,我都会对此进行编码以专门适应该约束。如果你的目标是一个像 100 这样的任意数字,如果它们仍然执行得太快会发生什么?它会是可预测的和一致的吗?如果需要限制每秒请求数,请专门执行此操作。不要做其他事情,希望它碰巧奏效。
标签: c# asynchronous task azure-cosmosdb