是否有众所周知的模式来管理 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();
}
此代码只是延迟当前对其的调用,但不会阻止来自其他线程的调用。现在我正在使用 a 实现一些不同的东西Stopwatch
,我想知道是否有一个众所周知的模式。注意:一切都使用 SDK。