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

C# Cancellationtoken(開発者向けの仕組み)

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

現代のソフトウェア開発において、特に大規模または複雑な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に不要な負荷をかけないようにしたいものです。

以下がIronPDFCancellationTokenを使用することが重要な理由です:

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を開いてパッケージマネージャーコンソールに移動します。 その後、以下のコマンドを実行します。

PM > Install-Package IronPdf

ソリューションのNuGetパッケージマネージャー経由で

Visual Studioを開いたら、"ツール -> NuGetパッケージマネージャー -> ソリューションのNuGetパッケージを管理"に移動してIronPDFを検索します。 ここから、プロジェクトを選択して"インストール"をクリックするだけで、IronPDFがプロジェクトに追加されます。

IronPDFをインストールしたら、IronPDFを使い始めるためには、コードの先頭に正しいusing文を追加するだけです。

using IronPdf;

ステップ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.");
    }
}

コンソール出力

C# Cancellationtoken(開発者向け動作原理):図2 - コンソール出力

PDF 出力

C# Cancellationtoken(開発者向け動作原理):図3 - PDF出力

この例では、CancellationTokenをC#プログラムで使用して、IronPDFを使用した長時間実行されるPDF生成タスクをキャンセルする方法を示します。 コードは2つの部分に分かれています: PDF生成プロセス(PdfGenerator クラス)とメインプログラムロジック(Program クラス)。

  • **クラスPdfGenerator:**このクラスには、CancellationTokenを通じてキャンセルをサポートしつつ、PDFファイル生成をシミュレートするメソッドが含まれています。
  • mainメソッド内で**CancellationTokenSource()を使用してキャンセルトークンソースを作成し、次にCancellationTokenSourceの**Tokenプロパティを渡してトークンオブジェクトを作成します。
  • ChromePdfRendererをIronPDFライブラリから使用して、HTMLコンテンツをPDFドキュメントにレンダリングします。
  • GeneratePdfWithCancellation メソッドは非同期です(async)であり、タスクを返します。 このメソッドはキャンセル要求を通じてタスクのキャンセルを扱うためにCancellationTokentoken)を受け入れます。
  • CancellationTokenを使用することで、長時間実行される操作を安全にキャンセルできます。 ただし、キャンセルは協力的であり、タスク自体が定期的にトークンのステータスをチェックしなければなりません。
  • このコードでは、定期的なキャンセルチェックを伴う長期間のタスクをシミュレートしています。 重要な点は、PDF生成プロセス中に手動でキャンセル(token.IsCancellationRequested)をチェックし、トークンが渡された場合にキャンセルメソッドを実行する準備をすることです。
  • ユーザーがプログラムのキャンセルを示すためにキーを押した場合、タスクは優雅に停止し、OperationCanceledExceptionをスローして、適切かつタイムリーにPDF生成の完了を防ぎます。
  • キャンセルが発生しない場合、結果のPDFは"output.pdf"として保存され、プログラムが完全なタスクプロセスを実行することを防ぎます。

IronPDFとCancellationTokenの実際の使用例

複数のキャンセルトークンを使用することで、IronPDFを使用した場合、アプリケーションの性能とユーザーエクスペリエンスを向上させることができる実用的な状況がいくつかあります。 以下はその例のいくつかです:

1. Webアプリケーション

Webアプリケーションにおいて、ユーザーはPDFフォーマットでのレポート生成などのアクションをよく開始します。 ただし、ユーザーがページから離れたりブラウザを閉じたりすると、システムはこれを検出し、CancellationTokenを使用してPDF生成プロセスを停止できます。

HttpContext.Response.RegisterForDispose(CancellationTokenSource);

このシンプルな実装により、不要なタスクにリソースを捧げることを防ぎ、Webサーバーのスケーリング効率を向上させます。

2. 長時間ランニングのレポート

レポート用のアプリケーションでは、ユーザーが大量のデータセットをPDFとしてエクスポートすることを要求することがあります。 ユーザーが考えを変えたり、不正確なクエリを実行したりした場合、CancellationTokenを使用して途中でタスクをキャンセルし、リソースの無駄を防ぐことができます。

3. バックグラウンドサービス

バックグラウンドサービスやマイクロサービスでは、大きなPDFバッチの生成のように多くの時間を要するタスクを管理する際にCancellationTokenを使用してより効率的に管理できます。 サービスがシャットダウンまたはスケールダウンする直前に、進行中のタスクをクリーンにキャンセルでき、データが失われたり破損したりすることがないようにします。

結論

今日のIronPDFでのキャンセレーショントークンの使用に関する議論を終えましたので、あなたはそれをプロのようにPDFプロジェクトに実装することができるでしょう! C#キャンセレーショントークンIronPDFを組み合わせて、高効率で応答性の高いアプリケーションを構築し、PDF生成タスクを優雅に処理します。 このアプローチは、タスクが実行中に中断されるのではなく、実行中の安全なポイントでキャンセル要求を確認できる協力キャンセルモデルを可能にします。

長時間実行されるレポートを管理したり、WebアプリケーションでのオンデマンドPDF生成やバックグラウンドサービスを管理したりする際に、単一または複数のCancellationTokenを組み込むことで、不要なタスクをキャンセルでき、リソースの無駄遣いを防ぎ、ユーザーエクスペリエンスを向上させます。

わずか数行のコードで、アプリのスケーラビリティと応答性を向上させ、ユーザーに自分のアクションに関するより多くのコントロールを提供できます。 IronPDFをまだ試していない方は、無料トライアルを試して、その強力なPDF生成能力がC#プロジェクトをどのように変革できるかを確認する絶好の機会です。

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% ロック解除済み。クレジットカード不要。

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

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

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