到目前为止,我有超过200个谷歌分析帐户来提取信息。我用限制数量的帐户(只有10个)测试了我的解决方案。 一旦我将所有帐户ID放入我的逻辑中,就会出现配额限制每100秒100个请求的错误。
foreach (var viewID in _viewIds)
{
foreach (var dateRange in dateRanges)
{
tTaskList.Add(Task.Run(async () =>
{
try
{ var tReports = await gc.PostAsyncTask(url, reportRequest);
foreach (var report in tReports.reports)
{
if (report != null)
{
//All report logic here
//(...)
bool hasNextPage = false;
do
{
//All pagination logic here
//(...)
}while(hasNextPage);
}
}
}
catch (Exception ex)
{
//Write in Log
var ex_message = Common.Utils.GetExceptionMessage(ex);
Logger.WriteConsoleLog(ex_message.MessageString, (int)Logger.Logs.ERROR, APIName, RequestID);
}
})
); //end add task
}
}
如何控制请求数量?为避免出现这些错误?
答案 0 :(得分:0)
配额限制每100秒100个请求。
它基本上是防洪你要快。您最多可以在100秒内完成100个请求。您可以做什么,可能最简单的解决方案是Implementing Exponential Backoff
我在申请中更进了一步。我创建了一个请求队列(最多100个项目)。我将请求的时间记录到毫秒。在我发送请求之前,我检查了que中第一个和最后一个项目之间的时间差,如果它超过95秒我暂停它以获得差异。这并没有完全阻止我得到这些错误,但它已经大大减少了它们。