Есть ли хорошо известный шаблон для управления ServiceUnavailable? Я НЕ очень доволен чем-то вроде этого
catch (CloudException e) when (System.Net.HttpStatusCode.ServiceUnavailable.Equals(e.Response?.StatusCode))
{
var howMuchWait = TimeSpan.FromMinutes(1);
if (e.Response.Headers.TryGetValue("Retry-After", out var hValue))
{
if(RetryConditionHeaderValue.TryParse(hValue.FirstOrDefault(), out var time) && time.Delta.HasValue)
{
howMuchWait = time.Delta.Value;
}
}
logger.LogWarning(() => $"Service Unavailable... Let him rest a bit, I will wait for {howMuchWait}.");
await Task.Delay(howMuchWait);
return indexEntities.Select(x => (string)x[indexKeyFieldName]).ToList();
}
Этот код просто задерживает текущий вызов к нему, но не предотвращает вызовы из других потоков. Теперь я реализую что-то другое, используя Stopwatch
, и хотел бы знать, есть ли известный шаблон. ПРИМЕЧАНИЕ: все с использованием SDK.