質問: 私はEntity Framework Core 2.2を使用していますが、ブログのサジェスチョンに従って、失敗時に再試行を有効にすることにしました: ``` services.AddDbContext( options => options.UseSqlServer(Configurations["ConnectionString"]), sqlServerOptionsAction: sqlOptions => { sqlOptions.EnableRetryOnFailure( maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(5), errorNumbersToAdd: null); }); ``` 私の質問は、 `maxRetryDelay`引数は何のためですか?再試行間の遅延時間であると予想されますが、名前はその最大時間を意味します。つまり、私が望むように5秒間隔ではなく1秒間隔で10回再試行できることを意味しますか?
回答: 再試行間の遅延は、 `maxRetryDelay`指定された値までランダム化され`maxRetryDelay` 。 これは、複数の再試行が同時に発生してサーバーが圧倒されるのを防ぐために行われます。たとえば、ネットワークの問題のためにWebサービスへの10Kリクエストが失敗し、15秒後に同時に再試行するとします。データベースサーバーは、15Kクエリの突然の波を取得します。 遅延をランダム化することにより、時間とクライアントに再試行が分散されます。 各再試行の遅延は、 ExecutionStragegy.GetNextDelayによって計算されます。 ソースは、ランダムな指数バックオフであることを示しています。 デフォルトのSqlServerRetryingExecutionStrategyはその実装を使用します。カスタム再試行戦略では、別の実装を使用できます