IRONSOFTWAREHOME
開発者向けアップデート

Polly Retry(開発者向けの動作方法)

Jacob Mellor、Ironチームの最高技術責任者(CTO)
Jacob Mellor
Updated: 2026年4月21日

一時的な障害、タイムアウト、および例外を上手に処理することは、堅牢で回復力のあるアプリケーション構築において重要です。 Pollyは、復元力と一時的な障害処理機能を提供する人気のある.NETライブラリです。 その多くの機能の中で、"リトライ"は最も広く使用されているポリシーの一つです。

この記事では、PollyのC#におけるリトライポリシーを掘り下げて、その使用方法、設定オプションを探り、実用的なコード例を提供します。 また、Pollyリトライ試行とともにPDF生成のためのIronPDFライブラリを使用して、フォームリクエスト結果のPDFを生成します。

Pollyリトライとは?

Pollyリトライは、エラーや一時的な障害により失敗する可能性のある操作を自動的に再試行できるようにするPollyライブラリによって提供されるポリシーです。 一時的な障害は、ネットワークの不具合、サービスの利用不可、または他の一時的な問題によって発生する一時的なエラーです。

Pollyのリトライポリシーでは、操作を再試行するためのルールを定義できます。これには、再試行の最大回数、複数の再試行の間の遅延、および失敗したリクエストを再試行する条件が含まれます。これにより、一時的な障害からクラッシュしたり、エンドユーザーに影響を与えたりすることなく回復できる堅牢なアプリケーションの構築が可能になります。

Pollyリトライの始め方

コード例に入る前に、C#プロジェクトにPollyをインストールして設定する方法の基本を設定しましょう。

Pollyのインストール

NuGetパッケージ マネージャー コンソールを使用して、以下のコマンドでPollyをインストールできます。

PM > Install-Package Polly

.NET CLIを通じて:

> dotnet add package Polly

Pollyのusingステートメントを追加

C#ファイルにPolly名前空間を含めてください。

using Polly;

基本的なリトライポリシーの例

リモートサービスからデータを取得する操作を再試行するシンプルな例から始めましょう。最大3回の再試行と再試行間の固定タイムアウト遅延2秒でリトライポリシーを設定します。

using System;
using System.Net.Http;
using Polly;

namespace PollyRetryExample
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Define a retry policy that handles HttpRequestException with a maximum of 3 retries
            var retryPolicy = Policy
                .Handle<HttpRequestException>() // Specify the exception type to handle
                .WaitAndRetry(
                    3, // Max retry attempts
                    retryAttempt => TimeSpan.FromSeconds(2), // Fixed retry delay
                    (exception, timeSpan, retryCount, context) =>
                    {
                        Console.WriteLine("Retry {0} due to {1}", retryCount, exception.Message);
                    });

            try
            {
                // Execute the action within the context of the retry policy
                retryPolicy.Execute(() =>
                {
                    FetchDataFromRemoteService();
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed after 3 retries: {0}", ex.Message);
            }
        }

        // Simulate fetching data that throws HttpRequestException
        public static void FetchDataFromRemoteService()
        {
            throw new HttpRequestException("Failed to fetch data from remote service");
        }
    }
}

この例では:

  • Handle<HttpRequestException>() は、HttpRequestException を処理し、それが発生した場合に操作をリトライすることを指定します。
  • WaitAndRetry() は、3回のリトライとリトライ間に2秒の固定遅延があるリトライポリシーを設定します(指定された最大期間)。
  • onRetry デリゲートは、リトライが発生したときにメッセージをログに記録します。

Polly リトライ(開発者向けの動作方法):図 1

高度なリトライポリシー設定

指数バックオフ

指数バックオフは、要求と再試行の間の遅延が指数関数的に増加する人気のあるリトライ戦略です。 Polly は、WaitAndRetry() を使用して指数バックオフを実装する便利な方法を提供します。

var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(
        retryCount: 3, // Max retry attempts
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)), // Exponential delay
        onRetry: (exception, timeSpan, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

Polly リトライ(開発者向けの動作方法):図 2

サーキットブレイカーを伴うリトライ

リトライとサーキットブレーカーの組み合わせは、サービスが継続的に失敗する場合に繰り返しリトライするのを防ぐことで回復力をさらに向上させることができます。 Pollyでは、リトライとサーキットブレーカーのポリシーを簡単に組み合わせることができます。

// Define a circuit breaker policy
var circuitBreakerPolicy = Policy
    .Handle<HttpRequestException>()
    .CircuitBreaker(
        exceptionsAllowedBeforeBreaking: 3, // Number of exceptions before breaking
        durationOfBreak: TimeSpan.FromSeconds(30), // Time circuit stays open
        onBreak: (ex, breakDelay) =>
        {
            Console.WriteLine($"Circuit broken due to {ex.Message}. Retry after {breakDelay.TotalSeconds} seconds.");
        },
        onReset: () =>
        {
            Console.WriteLine("Circuit reset.");
        });

// Define a retry policy
var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(
        retryCount: 3, // Max retry attempts
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(2), // Fixed retry delay
        onRetry: (exception, timeSpan, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

// Combine both policies into a single policy wrap
var policyWrap = Policy.Wrap(circuitBreakerPolicy, retryPolicy);

この例では:

  • CircuitBreaker() は、3 つの例外後にブレークし、30 秒間開いたままであるサーキットブレーカーポリシーを定義します。
  • Policy.Wrap() は、サーキットブレーカーとリトライポリシーを単一のポリシーに結合します。

Polly リトライ(開発者向けの動作方法):図 3

IronPDFの紹介

IronPDF C# PDF Library Overviewは、開発者が.NETアプリケーション内でPDFドキュメントを作成、編集、および操作できる強力なC#ライブラリです。 請求書、レポート、その他のタイプのPDFドキュメントを作成する必要がある場合、IronPDFはプロセスを簡単にする直感的なAPIを提供します。

IronPDFを使用すると、HTML、CSS、さらにはASP.NET WebページをPDFに簡単に変換でき、幅広い用途に対応する汎用ツールとなります。 また、テキストの追加、画像、インタラクティブ要素の追加、暗号化やデジタル署名によるPDFの保護などの高度な機能も提供しています。

IronPDFはHTMLをPDFに変換する機能に優れており、元のレイアウトやスタイルを正確に保ちます。 レポート、請求書、ドキュメントなどのWebベースのコンテンツからPDFを生成するのに最適です。 IronPDFは、HTMLファイル、URL、生のHTML文字列から高品質のPDFファイルに変換をサポートしています。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Polly RetryとIronPDF

IronPDFを使用する際には、外部ソースからデータを取得したり、PDFを生成する前に複雑な操作を行ったりする必要があるシナリオがあるかもしれません。

そのような場合、一時的な障害や一時的な問題によりPDF生成が失敗することがあります。 これらの一時的な障害をスムーズに処理するために、Polly RetryをIronPDFと組み合わせて使用できます。

IronPDFとPollyのインストール

始める前に、プロジェクトにIronPDFのNuGetパッケージをインストールしてください。

PM > Install-Package IronPdf

Polly RetryをIronPDFと一緒に使用する

IronPDFを使用してPDFを生成する際の一時的な障害を処理するために、Polly Retryを使用する例を見てみましょう。 次の例では、外部APIからデータを取得し、そのデータに基づいてPDFを生成する操作をシミュレートします。 当社では、Polly Retry を使用して、データ取得操作を失敗した場合に実行します。

using System;
using System.Net.Http;
using System.Threading.Tasks;
using IronPdf;
using Polly;

namespace IronPdfWithPollyRetry
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            // Define a retry policy with async capability
            var retryPolicy = Policy
                .Handle<HttpRequestException>() // Specify exception type to handle
                .WaitAndRetryAsync(
                    3, // Retry attempts
                    retryAttempt => TimeSpan.FromSeconds(2), // Calculated retry delay
                    (exception, timeSpan, retryCount, context) =>
                    {
                        Console.WriteLine("Retry " + retryCount + " due to " + exception.Message);
                    });

            // Execute the retry policy asynchronously
            var pdf = await retryPolicy.ExecuteAsync(async () =>
            {
                var data = await FetchDataFromExternalApiAsync(); // Fetch data from an external source
                return GeneratePdfFromData(data); // Generate PDF using fetched data
            });

            pdf.SaveAs("GeneratedDocument.pdf");
        }

        // Simulate fetching data from an external API
        static async Task<string> FetchDataFromExternalApiAsync()
        {
            await Task.Delay(100); // Simulate delay
            throw new HttpRequestException("Failed to fetch data from external API");
        }

        // Generate PDF using IronPDF based on the fetched data
        static PdfDocument GeneratePdfFromData(string data)
        {
            var htmlContent = "<html><body><h1>Data: " + data + "</h1></body></html>";
            var renderer = new ChromePdfRenderer();
            return renderer.RenderHtmlAsPdf(htmlContent);
        }
    }
}

このC#コードは、IronPDFを使用してPDFドキュメントを生成するリトライポリシーを実装するためのPollyライブラリの使用方法を示しています。 Main メソッドは、Polly の WaitAndRetryAsync メソッドを使用してリトライポリシーを初期化します。

このポリシーは、HttpRequestException を処理し、初回試行とリトライの間に2秒の遅延を持ち、最大3回操作をリトライすることを指定します。 リトライ失敗が発生した場合、リトライ試行番号と例外メッセージを示すメッセージがコンソールに印刷されます。

Main メソッドの内部で、リトライポリシーのロジックは retryPolicy.ExecuteAsync() を使用して非同期で実行されます。 この実行の中で、2 つの非同期操作 FetchDataFromExternalApiAsync() と GeneratePdfFromData(data) が連鎖されています。

もし FetchDataFromExternalApiAsync() が失敗(シミュレートされた例外を使用して意図的に設定されています)した場合、リトライポリシーは HttpRequestException をキャッチし、リトライ試行をログに記録して操作をリトライします。

FetchDataFromExternalApiAsync() メソッドは、外部 API からデータを取得することをシミュレートし、遅延を伴い、失敗したリクエストをシミュレートするために意図的に HttpRequestException をスローします。

Polly リトライ(開発者向けの動作方法):図 4

結論

結論として、Pollyのリトライポリシーは一時的な障害を処理し、堅牢性を確保するのに非常に価値があります。 リトライ試行、遅延、および条件を設定する柔軟性により、開発者は特定の要件に応じた復元力の戦略をカスタマイズできます。

IronPDFのようなライブラリと独立して、または組み合わせて使用するかにかかわらず、Pollyは一時的な障害から回復し、ユーザーエクスペリエンスとソフトウェアの信頼性を向上させるアプリケーションの作成を促進します。

Pollyのリトライ機能を統合することにより、開発者は、一時的な問題に適応し回復することができるより回復力のあるシステムを構築し、最終的にアプリケーションの全体的な品質と信頼性を向上させることができます。

IronPDF は市場で最高の C# PDF ライブラリであり、IronPDF のトライアルライセンス も提供しており、価格は $999 米ドルからです。

IronPDFを使用したHTMLからPDFへの変換について学ぶには、次のIronPDF HTML to PDF Conversion Tutorialを参照してください。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. ブラウズを選択し、"IronPDF"を検索
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

またはここからWindowsインストーラーをダウンロードする。

  1. IronPDFを~/Libsなどの場所に解凍し、ソリューションディレクトリ内に配置する
  2. Visual Studioソリューションエクスプローラーで参照を右クリックし、"IronPDF.dll"をブラウズして選択

ライセンスは$999から