C# Microsoft Graph SDK for.NET是否自动处理速率限制?

C# Microsoft Graph SDK for.NET是否自动处理速率限制?,c#,azure-active-directory,microsoft-graph-api,microsoft-graph-sdks,C#,Azure Active Directory,Microsoft Graph Api,Microsoft Graph Sdks,Microsoft rate将某些图形端点限制为每10分钟10000个请求()。如果达到限制,则重试后标题指示在发送另一个请求之前要等待多长时间 这是否由Graph SDK自动处理?如果没有,调用方应该采取什么步骤?我不认为Graph C#SDK会在请求被限制时自动重试,但有一个示例显示了429和503的指数退避逻辑 此示例还遵循了许多其他最佳实践—最大重试次数、记录请求ID和时间戳、指数退避等 用于分析“重试后”标头的代码: private TimeSpan GetServerRecommen

Microsoft rate将某些图形端点限制为每10分钟10000个请求()。如果达到限制,则
重试后
标题指示在发送另一个请求之前要等待多长时间


这是否由Graph SDK自动处理?如果没有,调用方应该采取什么步骤?

我不认为Graph C#SDK会在请求被限制时自动重试,但有一个示例显示了429和503的指数退避逻辑

此示例还遵循了许多其他最佳实践—最大重试次数、记录请求ID和时间戳、指数退避等

用于分析“重试后”标头的代码:

private TimeSpan GetServerRecommendedPause(HttpResponseMessage response)
    {
        var retryAfter = response?.Headers?.RetryAfter;
        if (retryAfter == null)
            return TimeSpan.Zero;

        return retryAfter.Date.HasValue
            ? retryAfter.Date.Value - DateTime.UtcNow
            : retryAfter.Delta.GetValueOrDefault(TimeSpan.Zero);
    }
用于确定在标头或指数退避后使用重试的代码:

if (((int)response.StatusCode == 429) || ((int)response.StatusCode == 503))
            {
                // Retry Only After the server specified time period obtained from the response.
                TimeSpan pauseDuration = TimeSpan.FromSeconds(Math.Pow(2, attempt));
                TimeSpan serverRecommendedPauseDuration = GetServerRecommendedPause(response);
                if (serverRecommendedPauseDuration > pauseDuration)
                {
                    pauseDuration = serverRecommendedPauseDuration;
                }

目前正在审查此功能。请看@MichaelMainer-刚刚看到该功能被合并。为了实现这一点,我们需要对代码进行任何更改吗?如果是,你能分享一些示例代码吗。蒂亚@乔塔姆谢斯:它还没有连接好。我们仍然需要创建客户端工厂来应用处理程序管道。因此,您要么需要等待一段时间才能实现,要么提供自己的重试机制,该机制基于捕获ServiceException并检查状态代码,然后提供退避方案。