.NETヘルプ C# Cancellationtoken(開発者向けの仕組み) Curtis Chau 更新日:6月 22, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 現代のソフトウェア開発において、特に大規模または複雑なPDFファイルの生成が一般的なアプリケーションでは、長時間実行されるタスクを効率的に管理することが重要です。 C#開発者は、シームレスなPDF作成のためにIronPDFに頼ることがよくありますが、潜在的に長時間に渡るPDF生成タスクを処理するには、ユーザーの中断やキャンセルを管理する方法が必要です。 ここでC#のCancellationTokenが登場します。 IronPDFと統合することで、PDF生成タスクを高応答かつ効率的にすることができます。 この記事では、CancellationTokenの重要性、そのIronPDFとの相性の良さ、タスクを優雅にキャンセルするための実装方法について探ります。 C#におけるCancellationTokenとは何ですか? CancellationTokenは、C#における非同期プログラミングの基本的な部分です。 それは、タスクがキャンセルされるべきであることを示すことができ、開発者に長時間にわたる操作のより大きなコントロールを与えます。 これは特に、目標量に達するまでデータから動的レポートを継続的に生成したいような、レポートや請求書の作成などのタスクを実行する際に役立ちます。この時点で操作がキャンセルされるべきであることを示すためにC#キャンセレーショントークンを使用し、プログラムを優雅に終了させます。 それはどのように機能しますか? 本質的に、CancellationTokenはタスクやメソッドに渡され、キャンセルの要求が出されているかどうかを定期的にチェックします。 もしそうであれば、タスクは優雅に終了することができ、リソースを解放し、アプリケーションの応答性を向上させます。 特にPDF生成のようなケースで役立ちます。複雑なドキュメントの作成には時間がかかることがあります。 CancellationTokensを使用することで、不要に長く実行されるタスクの潜在的な欠点を回避できます。これには、無駄なシステムリソースや悪いユーザーエクスペリエンスが含まれます。 内部キャンセレーショントークン C#において、内部キャンセレーショントークンとは、特定のクラスやメソッド内で作成され、管理されるキャンセレーショントークンを指します。外部ソースから渡されるわけではありません。 これは、単一のコンポーネントの範囲内でのタスクキャンセルのより細かいコントロールを可能にし、内部から発生するキャンセル要求を監視しレスポンスすることを可能にします。 内部キャンセレーショントークンを使用することは、キャンセルロジックをクラスの利用者に公開せずにカプセル化したいシナリオで特に有用です。これによりクリーンなインターフェースを維持できます。 このアプローチは、コードのモジュール性を向上させ、複雑な非同期ワークフローを管理しやすくする一方で、広範なCancellationTokenフレームワークによる柔軟性を活用できます。 IronPDFでキャンセレーショントークンを使う理由は? 特にWebアプリケーションや複雑なレポートシステムでPDFを生成する場合、大きなPDFファイルを作成するタスクをユーザーが開始するが、その後で画面を離れたり結果を不要としたりする状況に遭遇するかもしれません。 このような場合、PDF生成プロセスをキャンセルしてサーバーやUIに不要な負荷をかけないようにしたいものです。 以下がIronPDFとCancellationTokenを使用することが重要な理由です: 1. 不要な負荷を防ぐ ユーザーが依頼したPDFを必要としなくなった場合、そのプロセスを続行する理由はありません。 CancellationTokenを利用することで、PDF生成タスクを停止し、サーバーへの余分な負荷を防ぎ、アプリケーションの全体的なパフォーマンスを改善することができます。 2. ユーザーエクスペリエンスの向上 デスクトップアプリケーションでは、PDF生成がUIスレッド上で行われ、タスクが長時間にわたる場合、ユーザーインターフェースがロックされることがあります。 CancellationTokenを組み込むことで、ユーザーがタスクをキャンセルし、アプリケーションの応答性を保つことができます。 3. スケーラビリティの向上 多数のユーザーが同時にPDFを生成するWebアプリケーションにおいて、スケーラビリティが鍵となります。 CancellationTokenは、不要なタスクを安全にキャンセルし、他のリクエストを効率的に処理するためのリソースを解放することができます。 IronPDFでのCancellationToken実装方法 CancellationTokenが有用である理由がわかったので、IronPDFとの実装方法を説明します。 ステップ1:プロジェクトにIronPDFを設定する IronPDFを使用開始するには、まずインストールする必要があります。 すでにインストールされている場合は、次のセクションに進むことができます。 それ以外の場合は、以下の手順でIronPDFライブラリをインストールします。 NuGetパッケージマネージャコンソールを通じて NuGet パッケージ マネージャー コンソールを使用してIronPDFをインストールするには、Visual Studioを開き、パッケージ マネージャー コンソールに移動します。 次に、以下のコマンドを実行してください: Install-Package IronPdf NuGetパッケージマネージャ for Solutionを通じて Visual Studioを開き、「ツール -> NuGetパッケージマネージャ -> NuGetパッケージの管理」へ進み、IronPDFを検索します。 ここでは、プロジェクトを選択して「インストール」をクリックするだけで、IronPDFがプロジェクトに追加されます。 IronPDFをインストールしたら、コードの先頭に正しい using ステートメントを追加するだけでIronPDFの使用を開始できます。 using IronPdf; using IronPdf; Imports IronPdf $vbLabelText $csharpLabel ステップ2: 非同期PDF生成メソッドでキャンセレーショントークンを使用する 実際の実装に取り組みましょう。 この例では、IronPDFを使用してHTMLからシンプルなPDFを生成します。しかし、CancellationTokenを使用して、必要に応じてタスクをキャンセルできるようにします。 using IronPdf; using System; using System.Threading; using System.Threading.Tasks; public class PdfGenerator { public async Task GeneratePdfWithCancellation(CancellationToken token) { var Renderer = new ChromePdfRenderer(); try { // Check for cancellation before starting token.ThrowIfCancellationRequested(); // Simulating a long task that can be checked for cancellation periodically for (int i = 0; i < 10; i++) { // Simulating a piece of work (this could be part of a larger HTML rendering) await Task.Delay(500); // Simulate chunk processing // Periodically check for cancellation in long-running operations if (token.IsCancellationRequested) { Console.WriteLine("Cancellation requested. Throwing exception."); token.ThrowIfCancellationRequested(); // This will trigger an OperationCanceledException } } // Simulate PDF creation after the long process var pdf = await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>"); // Save the PDF after ensuring no cancellation occurred pdf.SaveAs("output.pdf"); Console.WriteLine("PDF generated successfully."); } catch (OperationCanceledException) { // Handle task cancellation Console.WriteLine("PDF generation was canceled."); } catch (Exception ex) { // Handle other exceptions Console.WriteLine($"An error occurred: {ex.Message}"); } } } public class Program { public static async Task Main(string[] args) { // Create a CancellationTokenSource var cancellationTokenSource = new CancellationTokenSource(); // Create our cancellation token var token = cancellationTokenSource.Token; // Start the PDF generation task var pdfGenerator = new PdfGenerator(); Task pdfTask = pdfGenerator.GeneratePdfWithCancellation(token); // Simulate a cancellation scenario Console.WriteLine("Press any key to cancel PDF generation..."); Console.ReadKey(); // Cancel the task by calling Cancel() on the CancellationTokenSource cancellationTokenSource.Cancel(); try { // Await the task to handle any exceptions, such as cancellation await pdfTask; } catch (OperationCanceledException) { // Confirm the cancellation Console.WriteLine("The PDF generation was canceled."); } finally { cancellationTokenSource.Dispose(); } Console.WriteLine("Program finished."); } } using IronPdf; using System; using System.Threading; using System.Threading.Tasks; public class PdfGenerator { public async Task GeneratePdfWithCancellation(CancellationToken token) { var Renderer = new ChromePdfRenderer(); try { // Check for cancellation before starting token.ThrowIfCancellationRequested(); // Simulating a long task that can be checked for cancellation periodically for (int i = 0; i < 10; i++) { // Simulating a piece of work (this could be part of a larger HTML rendering) await Task.Delay(500); // Simulate chunk processing // Periodically check for cancellation in long-running operations if (token.IsCancellationRequested) { Console.WriteLine("Cancellation requested. Throwing exception."); token.ThrowIfCancellationRequested(); // This will trigger an OperationCanceledException } } // Simulate PDF creation after the long process var pdf = await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>"); // Save the PDF after ensuring no cancellation occurred pdf.SaveAs("output.pdf"); Console.WriteLine("PDF generated successfully."); } catch (OperationCanceledException) { // Handle task cancellation Console.WriteLine("PDF generation was canceled."); } catch (Exception ex) { // Handle other exceptions Console.WriteLine($"An error occurred: {ex.Message}"); } } } public class Program { public static async Task Main(string[] args) { // Create a CancellationTokenSource var cancellationTokenSource = new CancellationTokenSource(); // Create our cancellation token var token = cancellationTokenSource.Token; // Start the PDF generation task var pdfGenerator = new PdfGenerator(); Task pdfTask = pdfGenerator.GeneratePdfWithCancellation(token); // Simulate a cancellation scenario Console.WriteLine("Press any key to cancel PDF generation..."); Console.ReadKey(); // Cancel the task by calling Cancel() on the CancellationTokenSource cancellationTokenSource.Cancel(); try { // Await the task to handle any exceptions, such as cancellation await pdfTask; } catch (OperationCanceledException) { // Confirm the cancellation Console.WriteLine("The PDF generation was canceled."); } finally { cancellationTokenSource.Dispose(); } Console.WriteLine("Program finished."); } } Imports IronPdf Imports System Imports System.Threading Imports System.Threading.Tasks Public Class PdfGenerator Public Async Function GeneratePdfWithCancellation(ByVal token As CancellationToken) As Task Dim Renderer = New ChromePdfRenderer() Try ' Check for cancellation before starting token.ThrowIfCancellationRequested() ' Simulating a long task that can be checked for cancellation periodically For i As Integer = 0 To 9 ' Simulating a piece of work (this could be part of a larger HTML rendering) Await Task.Delay(500) ' Simulate chunk processing ' Periodically check for cancellation in long-running operations If token.IsCancellationRequested Then Console.WriteLine("Cancellation requested. Throwing exception.") token.ThrowIfCancellationRequested() ' This will trigger an OperationCanceledException End If Next i ' Simulate PDF creation after the long process Dim pdf = Await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>") ' Save the PDF after ensuring no cancellation occurred pdf.SaveAs("output.pdf") Console.WriteLine("PDF generated successfully.") Catch e1 As OperationCanceledException ' Handle task cancellation Console.WriteLine("PDF generation was canceled.") Catch ex As Exception ' Handle other exceptions Console.WriteLine($"An error occurred: {ex.Message}") End Try End Function End Class Public Class Program Public Shared Async Function Main(ByVal args() As String) As Task ' Create a CancellationTokenSource Dim cancellationTokenSource As New CancellationTokenSource() ' Create our cancellation token Dim token = cancellationTokenSource.Token ' Start the PDF generation task Dim pdfGenerator As New PdfGenerator() Dim pdfTask As Task = pdfGenerator.GeneratePdfWithCancellation(token) ' Simulate a cancellation scenario Console.WriteLine("Press any key to cancel PDF generation...") Console.ReadKey() ' Cancel the task by calling Cancel() on the CancellationTokenSource cancellationTokenSource.Cancel() Try ' Await the task to handle any exceptions, such as cancellation Await pdfTask Catch e1 As OperationCanceledException ' Confirm the cancellation Console.WriteLine("The PDF generation was canceled.") Finally cancellationTokenSource.Dispose() End Try Console.WriteLine("Program finished.") End Function End Class $vbLabelText $csharpLabel コンソール出力 PDF 出力 この例では、CancellationTokenをC#プログラムで使用して、IronPDFを使用した長時間実行されるPDF生成タスクをキャンセルする方法を示します。 コードは2つの部分に分かれて構成されています:PDF生成プロセス(PdfGeneratorクラス)とメインプログラムロジック(Programクラス)。 クラスPdfGenerator:このクラスには、CancellationTokenを通じてキャンセルをサポートしつつ、PDFファイル生成をシミュレートするメソッドが含まれています。 メインメソッドで、CancellationTokenSource()を使用してキャンセレーショントークンソースを作成し、その後、CancellationTokenSourceのトークンプロパティを渡すことでトークンオブジェクトを作成します。 ChromePdfRendererをIronPDFライブラリから使用して、HTMLコンテンツをPDFドキュメントにレンダリングします。 GeneratePdfWithCancellationメソッドは非同期(async)であり、タスクを返します。 このメソッドは、CancellationToken(token)を受け取り、キャンセル要求を処理するためにタスクキャンセルを実行します。 CancellationTokenを使用することで、長時間実行される操作を安全にキャンセルできます。 ただし、キャンセルは協力的であり、タスク自体が定期的にトークンのステータスをチェックしなければなりません。 このコードでは、定期的なキャンセルチェックを伴う長期間のタスクをシミュレートしています。 重要な点は、PDF生成プロセス中にキャンセル(token.IsCancellationRequested)のチェックを手動で行い、トークンが渡されるとキャンセルメソッドを起動します。 ユーザーがプログラムのキャンセルを示すためにキーを押した場合、タスクは優雅に停止し、OperationCanceledExceptionをスローして、適切かつタイムリーにPDF生成の完了を防ぎます。 キャンセルが発生しない場合、結果のPDFは「output.pdf「として保存され、プログラムが完全なタスクプロセスを実行することを防ぎます。 IronPDFとCancellationTokenの実際の使用例 IronPDFと一つまたは複数のキャンセレーショントークンを使用することで、アプリケーションのパフォーマンスとユーザーエクスペリエンスを向上させるいくつかの実際的な状況があります。 以下にいくつかの例を示します: 1. Webアプリケーション Webアプリケーションにおいて、ユーザーはPDFフォーマットでのレポート生成などのアクションをよく開始します。 しかし、ユーザーがページを離れたりブラウザを閉じた場合、システムはこれを検知し、キャンセレーショントークンを使用してPDF生成プロセスを停止できます。 HttpContext.Response.RegisterForDispose(CancellationTokenSource); HttpContext.Response.RegisterForDispose(CancellationTokenSource); HttpContext.Response.RegisterForDispose(CancellationTokenSource) $vbLabelText $csharpLabel このシンプルな実装により、不要なタスクにリソースを捧げることを防ぎ、Webサーバーのスケーリング効率を向上させます。 2. 長時間ランニングのレポート レポート用のアプリケーションでは、ユーザーが大量のデータセットをPDFとしてエクスポートすることを要求することがあります。 ユーザーが意見を変えたり、誤ったクエリを実行した場合、キャンセレーショントークンを使用することで、途中でタスクをキャンセルし、リソースの無駄を防ぐことができます。 3. バックグラウンドサービス バックグラウンドサービスやマイクロサービスにおいては、大規模なバッチPDFを生成するなど、かなりの時間を要するタスクがキャンセレーショントークンを使用してより効率的に管理できます。 サービスがシャットダウンするまたはスケールダウンする前に、進行中のタスクをきれいにキャンセルし、データの損失や損傷を確実に回避します。 結論 今日のIronPDFでのキャンセレーショントークンの使用に関する議論を終えましたので、あなたはそれをプロのようにPDFプロジェクトに実装することができるでしょう! C#キャンセレーショントークンとIronPDFを組み合わせて、高効率で応答性の高いアプリケーションを構築し、PDF生成タスクを優雅に処理します。 このアプローチは、タスクが実行中に中断されるのではなく、実行中の安全なポイントでキャンセル要求を確認できる協力キャンセルモデルを可能にします。 長時間実行されるレポートを管理したり、WebアプリケーションでのオンデマンドPDF生成やバックグラウンドサービスを管理したりする際に、単一または複数のCancellationTokenを組み込むことで、不要なタスクをキャンセルでき、リソースの無駄遣いを防ぎ、ユーザーエクスペリエンスを向上させます。 わずか数行のコードで、アプリのスケーラビリティと応答性を向上させ、ユーザーに自分のアクションに関するより多くのコントロールを提供できます。 IronPDFをまだ試していない方は、無料トライアルを試して、その強力なPDF生成能力がC#プロジェクトをどのように変革できるかを確認する絶好の機会です。 よくある質問 C#で長時間実行されるタスクを管理するためにCancellationTokenをどのように使用できますか? CancellationTokenを長時間実行されるタスクに統合するには、それをタスクに渡し、キャンセルが要求されているかどうかを定期的に確認します。これにより、リソースを解放し、アプリケーションの応答性を維持しながら、タスクを円滑に終了できます。 PDF生成において、なぜCancellationTokenが重要ですか? PDF生成では、CancellationTokenは、ユーザーがページから離れた場合などに不要になるタスクをキャンセルすることで、効率的にリソースを管理するのに役立ちます。これにより過剰なサーバーロードを防ぎ、ユーザーエクスペリエンスを向上させます。 C#のPDF生成タスクでCancellationTokenをどのように実装しますか? C#のPDF生成タスクにおいて、CancellationTokenを実装するには、トークンをメソッドに渡し、実行中にキャンセル要求を定期的に確認します。キャンセルが検出された場合、タスクを円滑に終了できます。 PDF生成において、CancellationTokenと非同期メソッドを使用する目的は何ですか? PDF生成でCancellationTokenと非同期メソッドを使用することで、タスクを非同期で実行し、アプリケーションの応答性を向上させ、不要になった場合にはタスクをキャンセルできるようにします。 CancellationTokenはWebアプリケーションでのユーザーエクスペリエンスをどのように改善しますか? CancellationTokenを利用することで、ユーザーがページから離れる際にPDF生成などのタスクをキャンセルし、不要な処理を防ぎつつアプリケーションの応答性を維持することで、ユーザーエクスペリエンスを向上させます。 非同期のPDF作成におけるChromePdfRendererの役割は何ですか? IronPDFのChromePdfRendererはHTMLコンテンツをPDFドキュメントに変換します。非同期操作をサポートしており、CancellationTokenを使用してタスクのライフサイクルと応答性を効果的に管理できます。 PDF生成中にキャンセル要求が行われた場合、何が起こりますか? PDF生成中にキャンセル要求が行われた場合、タスクはCancellationTokenの状態を確認します。キャンセルが検出されると、OperationCanceledExceptionをスローし、プロセスを停止してリソースを節約します。 CancellationTokenはどのようにアプリケーションのスケーラビリティを向上させますか? CancellationTokenは、例えばPDF生成時に不要なタスクをキャンセルできるため、リソース消費を削減し、アプリケーションの全体的なパフォーマンスを向上させることでスケーラビリティを向上させます。 バックグラウンドサービスでCancellationTokenを使用する利点は何ですか? バックグラウンドサービスでは、サービスのシャットダウンやスケーリング操作時に、バッチPDF処理のような長時間実行されるタスクをクリーンにキャンセルできるように、CancellationTokenを使用して管理します。 CancellationTokenをIronPDFと統合することでアプリケーションの効率性はどのように向上しますか? CancellationTokenをIronPDFと統合することで、不要なPDF生成タスクをキャンセルすることでリソース管理が改善され、アプリケーションの効率性と応答性が向上し、サーバーロードが軽減されます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# Select Case(開発者向けの仕組み)math.max C#(開発者向けの仕...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む