Я создал метод для добавления участников группового запроса в группу Google с помощью ядра .NET и клиентской библиотеки Google .NET.Код выглядит следующим образом:
private void InitializeGSuiteDirectoryService()
{
_directoryServiceCredential = GoogleCredential
.FromJson(GlobalSettings.Instance.GSuiteSettings.Credentials)
.CreateScoped(_scopes)
.CreateWithUser(GlobalSettings.Instance.GSuiteSettings.User);
_directoryService = new DirectoryService(new BaseClientService.Initializer()
{
HttpClientInitializer = _directoryServiceCredential,
ApplicationName = _applicationName
});
}
public OperationResult<int> AddGroupMembers(Group group, IEnumerable<Member> members)
{
var result = new OperationResult<int>();
var memberList = members.ToList();
var batchRequestCount = 0;
if (memberList.Any())
{
var request = new BatchRequest(_directoryService);
foreach (var member in memberList)
{
batchRequestCount++;
request.Queue<Members>(_directoryService.Members.Insert(member, group.Id), (content, error, i, message) =>
{
if (message.IsSuccessStatusCode)
{
//log OK
}
else
{
// Implement Exponential backoff only on the request that failed.
}
});
if (batchRequestCount == 30|| member.Equals(memberList.Last()))
{
request.ExecuteAsync().Wait();
request = new BatchRequest(_directoryService); //Clear queue
}
}
}
return result;
}
Логика работает нормально, если количество членов мало;однако, когда число участников, скажем, 100 (это максимальное количество пользователей в тестовом экземпляре моего Google), я получаю сообщение об ошибке от Google, которое гласит: «quotaExceeded».В соответствии с документацией Google ограничение на пакетный запрос в их Admin SDK составляет 1000, и я установил для своей логики значение Выполнить, когда мы достигнем предела 30.
ВОПРОС:Как мне реализовать обработку ошибок, чтобы повторить всякий раз, когда я получаю эту ошибку?Их документация предлагает реализовать «экспоненциальный откат» с ответом, который содержит «ошибку повторения» (я не вижу этого, когда проверяю свой ответ).