0Pricing
C# Academy · レッスン

タイムアウトとフォールバックのポリシー

待機時間を制限し、適切なフォールバックを提供します。

「タイムアウトとフォールバックのポリシー」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

タイムアウトが重要な理由

戻ってこない呼び出しは、失敗する呼び出しよりも深刻です。スレッドや接続を占有してしまうためです。タイムアウト戦略を使うと、Polly が操作をキャンセルするまでの実行時間に上限を設定できます。

タイムアウトの追加

Polly v8 にはAddTimeoutが用意されています。制限時間を超えるとTimeoutRejectedExceptionをスローし、基になるトークンをキャンセルします。

using Polly.Timeout;

var pipeline = new ResiliencePipelineBuilder()
    .AddTimeout(TimeSpan.FromSeconds(3))
    .Build();

協調的キャンセル

タイムアウトは、コールバックに渡されたCancellationTokenをキャンセルすることで機能します。タイムアウトを速やかに反映させるには、コード側でそのトークンを適切に処理する必要があります。

await pipeline.ExecuteAsync(async token =>
{
    // token is cancelled when the timeout fires
    await httpClient.GetAsync(url, token);
});

タイムアウトへの対応

TimeoutStrategyOptionsとOnTimeoutコールバックを使うと、操作が途中で打ち切られたときにログを記録したり、メトリクスを出力したりできます。

new TimeoutStrategyOptions
{
    Timeout = TimeSpan.FromSeconds(3),
    OnTimeout = args =>
    {
        Console.WriteLine($"Timed out after {args.Timeout}");
        return default;
    }
};

フォールバックとは

フォールバックは、操作が失敗したときに代替結果を提供します。キャッシュされたデータ、デフォルト値、わかりやすいメッセージなどを返すことで、エラーを表示する代わりにユーザーへ適切に縮退した体験を提供できます。

フォールバック戦略の追加

AddFallbackには型付きパイプラインが必要です。処理対象とする失敗と、その代わりに返す値を定義します。

using Polly.Fallback;

var pipeline = new ResiliencePipelineBuilder<string>()
    .AddFallback(new FallbackStrategyOptions<string>
    {
        ShouldHandle = new PredicateBuilder<string>()
            .Handle<HttpRequestException>(),
        FallbackAction = args =>
            Outcome.FromResultAsValueTask("cached default")
    })
    .Build();

フォールバックとしてのキャッシュデータの返却

よく使われるパターンは、ライブ呼び出しが失敗したときに、キャッシュから最後に正常だった値を返す方法です。これによりアプリの応答性を維持できます。

FallbackAction = args =>
{
    var cached = _cache.GetLastKnownGood();
    return Outcome.FromResultAsValueTask(cached);
}

フォールバックの監視

フォールバックが実行されるとOnFallbackコールバックが呼び出されます。縮退経路が選択されたことをログに記録するのに適しています。

new FallbackStrategyOptions<string>
{
    FallbackAction = args => Outcome.FromResultAsValueTask("default"),
    OnFallback = args =>
    {
        Console.WriteLine("Fallback executed");
        return default;
    }
};

タイムアウトとフォールバックの併用

これらを組み合わせると強力です。タイムアウトで待機時間に上限を設け、タイムアウトやその他の処理対象の失敗が発生したときはフォールバックで値を返すため、呼び出し元がハングしたりクラッシュしたりすることがありません。

適切なタイムアウトの選択

タイムアウトは、根拠なく小さな値にするのではなく、現実的なレイテンシーに余裕を加えて設定してください。厳しすぎると正常な呼び出しまで失敗し、緩すぎるとタイムアウトの目的を果たせません。

フォールバックは最後の手段

フォールバックは最外側の戦略として配置してください。そうすれば、再試行、ブレーカー、タイムアウトのいずれから発生した失敗も捕捉でき、呼び出し元に常に利用可能な結果を返せます。

確認テスト

タイムアウトとフォールバックの戦略をテストします。

まとめ

タイムアウトはAddTimeoutで操作時間に上限を設け、トークンをキャンセルしてTimeoutRejectedExceptionをスローします(トークンを適切に処理してください)。フォールバックは、FallbackActionを指定したAddFallbackによって代替結果を提供し、キャッシュデータを返すことがよくあります。両者を組み合わせることで、待機時間に上限を設けたうえで適切に縮退し、アプリの応答性を維持できます。フォールバックは最外側に配置して、処理対象となるすべての失敗を捕捉してください。

よくある質問

「タイムアウトとフォールバックのポリシー」レッスンは無料ですか?

はい。「タイムアウトとフォールバックのポリシー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「タイムアウトとフォールバックのポリシー」で何を学びますか?

待機時間を制限し、適切なフォールバックを提供します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「タイムアウトとフォールバックのポリシー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 再試行ポリシー
  2. サーキットブレーカーパターン
  3. タイムアウトとフォールバックのポリシー
  4. レジリエンスパイプライン
← C# Academyに戻る