ServiceUnavailableを管理するためのよく知られたパターンはありますか? 私はこのコードは、単にそれに現在の通話を遅らせるが、他のスレッドからの呼び出しを防ぐことはできません。このAzureの検索503
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を使用しているすべて。
こんにちは。私は、サービスにもっと多くの仕事を送ろうとしていることを知っています。そのため、RetryPolicy(「私が忙しいことを知っているなら、(再試行しないでください)」と読みません。私はこのような何かに取り組んでいます: '' 'タスクの非同期プライベート> InsertBatch(ISearchIndexClientインデックス、リスト indexEntities) \t \t { \t \t \t(IsInDoNotDisturb()) \t \t \t { \t \t場合\t \t return indexEntities.Select(x =>(文字列)x [indexKeyFieldName])。ToList(); \t \t \t '' ' –
Liam/Bruceは、私たちにそれを尊重する機会を与えるために503で' Retry-After'ヘッダーを持たせるのが本当に便利です。 –