.NETヘルプ Polly Retry(開発者向けの動作方法) Jacob Mellor 更新日:2025年7月28日 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る 一時的な障害、タイムアウト、および例外を上手に処理することは、堅牢で回復力のあるアプリケーション構築において重要です。 Pollyは、復元力と一時的な障害処理機能を提供する人気のある.NETライブラリです。 その多くの機能の中で、"リトライ"は最も広く使用されているポリシーの一つです。 この記事では、C#のPollyのリトライポリシーについて掘り下げ、その使用法や設定オプション、実用的なコード例を提供します。 また、Pollyリトライ試行とともにPDF生成のためのIronPDFライブラリを使用して、フォームリクエスト結果のPDFを生成します。 Pollyリトライとは? Pollyリトライは、エラーや一時的な障害により失敗する可能性のある操作を自動的に再試行できるようにするPollyライブラリによって提供されるポリシーです。 一時的な障害は、ネットワークの不具合、サービスの利用不可、または他の一時的な問題によって発生する一時的なエラーです。 Pollyのリトライポリシーでは、操作を再試行するためのルールを定義できます。これには、再試行の最大回数、複数の再試行の間の遅延、および失敗したリクエストを再試行する条件が含まれます。これにより、一時的な障害からクラッシュしたり、エンドユーザーに影響を与えたりすることなく回復できる堅牢なアプリケーションの構築が可能になります。 Pollyリトライの始め方 コード例に入る前に、C#プロジェクトにPollyをインストールして設定する方法の基本を設定しましょう。 Pollyのインストール NuGetパッケージ マネージャー コンソールを使用して、以下のコマンドでPollyをインストールできます。 Install-Package Polly .NET CLIを通じて: dotnet add package Polly Pollyのusingステートメントを追加 C#ファイルにPolly名前空間を含めてください。 using Polly; using Polly; $vbLabelText $csharpLabel 基本的なリトライポリシーの例 リモートサービスからデータを取得する操作を再試行するシンプルな例から始めましょう。最大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"); } } } 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"); } } } $vbLabelText $csharpLabel この例では: Handle<HttpRequestException>() は、HttpRequestException を処理して、発生した場合に操作を再試行することを指定します。 WaitAndRetry() は、再試行ポリシーを 3 回に設定し、再試行間の固定遅延を 2 秒に設定します (指定された最大期間)。 onRetry 再試行が発生したときにデリゲートがメッセージを記録します。 高度なリトライポリシー設定 指数バックオフ 指数バックオフは、要求と再試行の間の遅延が指数関数的に増加する人気のあるリトライ戦略です。 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}"); }); 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}"); }); $vbLabelText $csharpLabel サーキットブレイカーを伴うリトライ リトライとサーキットブレーカーの組み合わせは、サービスが継続的に失敗する場合に繰り返しリトライするのを防ぐことで回復力をさらに向上させることができます。 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); // 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); $vbLabelText $csharpLabel この例では: CircuitBreaker() は、3 回の例外発生後に中断し、30 秒間開いたままになるサーキット ブレーカー ポリシーを定義します。 Policy.Wrap() は、サーキットブレーカーと再試行ポリシーを 1 つのポリシーに結合します。 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"); } } 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"); } } $vbLabelText $csharpLabel Polly RetryとIronPDF IronPDFを使用する際には、外部ソースからデータを取得したり、PDFを生成する前に複雑な操作を行ったりする必要があるシナリオがあるかもしれません。 そのような場合、一時的な障害や一時的な問題によりPDF生成が失敗することがあります。 これらの一時的な障害をスムーズに処理するために、Polly RetryをIronPDFと組み合わせて使用できます。 IronPDFとPollyのインストール 始める前に、プロジェクトにIronPDFのNuGetパッケージをインストールしてください。 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); } } } 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); } } } $vbLabelText $csharpLabel このC#コードは、IronPDFを使用してPDFドキュメントを生成するリトライポリシーを実装するためのPollyライブラリの使用方法を示しています。 Main メソッドは、Polly の WaitAndRetryAsync メソッドを使用して再試行ポリシーを初期化します。 このポリシーは、HttpRequestException を処理し、最初の試行と再試行の間に 2 秒の遅延を設けて、操作を最大 3 回再試行することを指定します。 リトライ失敗が発生した場合、リトライ試行番号と例外メッセージを示すメッセージがコンソールに印刷されます。 Main メソッド内では、再試行ポリシー ロジックは retryPolicy.ExecuteAsync() を使用して非同期的に実行されます。 この実行では、2 つの非同期操作が連鎖されています: FetchDataFromExternalApiAsync() と GeneratePdfFromData(data)。 FetchDataFromExternalApiAsync() が失敗した場合 (シミュレートされた例外を実行するように意図的に設定されているため)、再試行ポリシーによって HttpRequestException がキャッチされ、再試行がログに記録され、操作が再試行されます。 FetchDataFromExternalApiAsync() メソッドは、遅延を伴って外部 API からデータを取得することをシミュレートし、意図的に HttpRequestException をスローして失敗したリクエストをシミュレートします。 結論 結論として、Pollyのリトライポリシーは一時的な障害を処理し、堅牢性を確保するのに非常に価値があります。 リトライ試行、遅延、および条件を設定する柔軟性により、開発者は特定の要件に応じた復元力の戦略をカスタマイズできます。 IronPDFのようなライブラリと独立して、または組み合わせて使用するかにかかわらず、Pollyは一時的な障害から回復し、ユーザーエクスペリエンスとソフトウェアの信頼性を向上させるアプリケーションの作成を促進します。 Pollyのリトライ機能を統合することにより、開発者は、一時的な問題に適応し回復することができるより回復力のあるシステムを構築し、最終的にアプリケーションの全体的な品質と信頼性を向上させることができます。 IronPDF は市場で最高の C# PDF ライブラリであり、 IronPDFの試用ライセンスも提供しており、価格は $799 USD から始まります。 IronPDFを使用したHTMLからPDFへの変換について学ぶには、次のIronPDF HTML to PDF Conversion Tutorialを参照してください。 よくある質問 C#でのPolly Retryとは何ですか? Polly Retryは、C#のPollyライブラリの機能であり、ネットワークの問題やサービスの利用不可などの一時的な問題で失敗した操作を自動的に再試行することを可能にします。これは、一時的な障害を優雅に処理することで、回復力のあるアプリケーションを構築するのに役立ちます。 Pollyを使用して基本的なリトライポリシーをどのように実装できますか? Pollyで基本的なリトライポリシーを実装するには、HttpRequestExceptionなどの例外を処理し、最大3回まで再試行し、各試行の間に2秒の固定遅延を設定します。 Pollyにおける指数バックオフの重要性は何ですか? Pollyの指数バックオフは、リトライの遅延を指数的に増加させるために使用され、異常時にサービスへの負荷を軽減するのに役立ちます。これはPollyのWaitAndRetryメソッドを使用して、指数成長に基づいて遅延を計算することで実装できます。 C#プロジェクトにPollyをインストールするにはどうすればいいですか? NuGetパッケージマネージャーコンソールでInstall-Package Pollyコマンドを使用するか、.NET CLIでdotnet add package Pollyコマンドを使ってC#プロジェクトにPollyをインストールできます。 Pollyのリトライポリシーを他のレジリエンス戦略と組み合わせることはできますか? はい、Pollyは回路遮断機などの他のレジリエンス戦略とリトライポリシーを組み合わせることができ、Policy.Wrapメソッドを使用して、サービスが一貫して失敗する際の繰り返し再試行を防ぎながらアプリケーションの回復力を向上させます。 C# で HTML を PDF に変換するにはどうすればいいですか? IronPDFのメソッドRenderHtmlAsPdfを使用して、HTML文字列をPDFに変換できます。IronPDFはHTMLファイルやWebページ、CSSを含むものをPDF形式に変換することもサポートしています。 なぜPollyのリトライポリシーはC#アプリケーションにとって重要なのですか? Pollyのリトライポリシーは、C#アプリケーションにおける一時的な障害を処理するために重要であり、システムがクラッシュすることなく一時的な失敗から回復することを可能にすることで、堅牢性とユーザーエクスペリエンスを向上させます。 PDF生成プロセスにおいて、リトライ戦略はどのように実装できますか? PDFを生成する際、一時的な障害を処理するためにPollyを使用してリトライ戦略を実装できます。IronPDFとPollyのリトライ機能を統合することで、一時的なネットワークやサービスの問題が発生した場合にもPDF操作を複数回試みることができます。 C# PDFライブラリとしてのIronPDFをインストールするにはどうすればいいですか? IronPDFはNuGetパッケージマネージャーを使ってInstall-Package IronPDFコマンドでインストールでき、C#アプリケーション内でPDF文書の作成、編集、操作を行えます。 PDF生成にIronPDFを使用する利点は何ですか? IronPDFは.NETアプリケーションでPDF文書を作成および操作するための強力な機能を提供します。HTML、CSS、WebページをPDFに変換し、テキストや画像を追加し、暗号化によって文書を保護することができます。 Jacob Mellor 今すぐエンジニアリングチームとチャット 最高技術責任者(CTO) ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。 関連する記事 更新日 2026年2月20日 CLIの簡素化と.NETの橋渡し:Curl DotNetとIronPDFを使う Jacob Mellorは、.NETエコシステムにcURLの親しみやすさをもたらすために作成されたライブラリ、CurlDotNetでこのギャップを埋めました。 詳しく読む 更新日 2025年12月20日 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 2025年12月20日 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# iList(開発者向けの動作方法)WebClient C#(開発者向けの...
更新日 2026年2月20日 CLIの簡素化と.NETの橋渡し:Curl DotNetとIronPDFを使う Jacob Mellorは、.NETエコシステムにcURLの親しみやすさをもたらすために作成されたライブラリ、CurlDotNetでこのギャップを埋めました。 詳しく読む
更新日 2025年12月20日 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 2025年12月20日 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む