透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
現代のソフトウェア開発において、効率的に長時間のタスクを管理することは、特に大規模または複雑なPDFファイルの生成が一般的なアプリケーションでは重要です。 C# 開発者は、シームレスなPDF作成のためにIronPDFに頻繁に依存していますが、潜在的に長いPDF生成タスクを処理するには、ユーザーによる中断やキャンセルを管理する方法が必要です。
これはC#のCancellationTokenが活用される場面です。 IronPDFと統合することで、PDF生成タスクが応答性が高く効率的になることを保証できます。 この記事では、CancellationToken の重要性、IronPDF と相性が良い理由、タスクを優雅にキャンセルするためにどのように実装できるかについて探ります。
CancellationToken は、C# での非同期プログラミングの基本的な部分です。 それにより、タスクをキャンセルすることを知らせることができ、長時間実行されるオペレーションに対して開発者により大きな制御を提供します。 これは、レポートや請求書の作成などのタスクを実行する際に特に役立ちます。その際、目標額に達するまでデータから動的なレポートを継続的に生成したい場合があり、その時点でC#キャンセルトークンを使用して操作をキャンセルすることを示すことで、プログラムを優雅に終了させることができます。
本質的に、CancellationToken はタスクやメソッドに渡され、定期的にキャンセルが要求されたかどうかをチェックします。 その場合、タスクは優雅に終了し、リソースを解放してアプリケーションの応答性を向上させることができます。 これは、PDF生成のような複雑なドキュメントの作成に時間がかかる場合に特に役立ちます。
CancellationTokensを使用することで、不要に長く実行されるタスクの潜在的なデメリット、例えばシステムリソースの無駄や悪いユーザーエクスペリエンスを回避することができます。
C#では、内部キャンセレーショントークンは、外部ソースから渡されるのではなく、特定のクラスまたはメソッド内で作成および管理されるキャンセレーショントークンを指します。 これは、単一コンポーネントの範囲内でタスクのキャンセルをより細かく制御できるようにし、内部から発生するキャンセル要求を監視し、応答することを可能にします。
内部キャンセレーショントークンを使用することは、キャンセルロジックをクラスの消費者に公開せずにカプセル化したいシナリオで特に有用です。これにより、クリーンなインターフェースを維持できます。 このアプローチはコードのモジュール性を高め、複雑な非同期ワークフローを管理しやすくすることができますが、同時により広範なCancellationTokenフレームワークによって提供される柔軟性も活用します。
PDFを生成する際、特にWebアプリケーションや複雑なレポートシステムにおいて、ユーザーが大きなPDFファイルの作成などのタスクを開始したが、その後他のページへ移動したり、結果をもう必要としなくなったりする状況に遭遇することがあります。 このような場合、サーバーやUIに不必要な負荷がかからないよう、PDF生成プロセスをキャンセルするオプションが必要です。
こちらがIronPDFでCancellationTokenを使用することが重要な理由です:
ユーザーがリクエストしたPDFをもう必要としない場合、プロセスを続行する理由はありません。 CancellationToken を利用することで、PDF 生成タスクを停止し、サーバーの過剰な負荷を防ぎ、アプリケーション全体のパフォーマンスを改善できます。
デスクトップアプリケーションにおいて、PDFの生成はUIスレッドで行われる可能性があり、タスクが長時間実行されている場合、ユーザーインターフェースがロックされることがあります。 CancellationToken を組み込むことで、ユーザーはタスクをキャンセルしてアプリケーションを応答性のある状態に保つことができます。
多数のユーザーが同時にPDFを生成するWebアプリケーションにおいて、スケーラビリティは重要です。 CancellationTokenを使用すると、不必要なタスクを安全にキャンセルでき、他のリクエストを効率的に処理するためのリソースを解放できます。
CancellationTokenがなぜ有用であるか理解したところで、IronPDFと共にそれを実装する方法を見ていきましょう。
IronPDFを使用開始するには、最初にインストールする必要があります。 すでにインストールされている場合は、次のセクションに進むことができます。そうでない場合は、以下の手順がIronPDFライブラリのインストール方法を説明しています。
NuGet パッケージ マネージャー コンソールを使用して
IronPDF をインストールするには、NuGet パッケージ マネージャー コンソールを使用して、Visual Studio を開き、パッケージ マネージャー コンソールに移動します。 次に、以下のコマンドを実行します。
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
ソリューションのためのNuGetパッケージマネージャーを通じて
Visual Studioを開き、「ツール -> NuGet パッケージマネージャー -> ソリューションのNuGetパッケージを管理」に移動し、IronPDFを検索します。 ここからは、プロジェクトを選択して「インストール」をクリックするだけで、IronPDF がプロジェクトに追加されます。
-->IronPDFをインストールしたら、IronPDFを使用するために必要なのはコードの先頭に正しいusingステートメントを追加することだけです。
using IronPdf;
using IronPdf;
Imports IronPdf
実際の実装に入りましょう。 この例では、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();
// Creating our one 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();
// Creating our one 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()
' Creating our one 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
コンソール出力
PDF出力
この例では、C#プログラムにおいてCancellationTokenを使用して、IronPDFを用いた長時間実行のPDF生成タスクをキャンセルする方法を示します。 コードは2つの部分に分かれています: PDF生成プロセス(PdfGeneratorクラス)とメインプログラムロジック(Programクラス)。
IronPDFで1つまたは複数のキャンセレーショントークンを使用することが、アプリケーションのパフォーマンスとユーザーエクスペリエンスを向上させる複数の実用的な状況があります。 以下にいくつかの例を示します:
ウェブアプリケーションでは、ユーザーはしばしばPDF形式でのレポート作成などのアクションを開始します。 しかし、ユーザーがページから離れたりブラウザを閉じたりすると、システムはこれを検出し、CancellationToken を使用してPDF生成プロセスを停止することができます。
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource)
このシンプルな実装により、不要になったタスクにリソースを割り当てることなく、Webサーバーがより効果的にスケールできるようになります。
レポートアプリケーションでは、ユーザーが大規模なデータセットをPDFとしてエクスポートするよう要求することがあります。 ユーザーが気が変わったり、誤ったクエリを行った場合、CancellationTokenを使用すると、タスクを途中でキャンセルすることができ、リソースの浪費を防ぐことができます。
バックグラウンドサービスやマイクロサービスにおいて、CancellationTokenを使用することで、大量のPDFバッチを生成するなどの多くの時間を要するタスクをより効率的に管理できます。 サービスがシャットダウンまたは縮小される際、進行中のタスクはクリーンにキャンセルされ、データが失われたり破損したりすることがないように保証されます。
これで、IronPDFでcancellationtokensを使用することについての今日のディスカッションの終わりに来ました。プロのようにPDFプロジェクトにそれらを実装できるようになります! C# CancellationTokenをIronPDFと共に使用することで、PDF生成タスクを優雅に処理する、より効率的で応答性の高いアプリケーションを構築することができます。 このアプローチは協調キャンセルモデルを可能にし、タスクが実行中のセーフポイントでキャンセル要求を確認することができるようにします。これにより、突然終了されることなく、適切なタイミングでキャンセルを行うことができます。
長時間実行されるレポート、ウェブアプリケーションでのオンデマンドPDF生成、またはバックグラウンドサービスを管理している場合、CancellationTokenまたは複数のトークンを同時に組み込むことで、不必要なタスクをキャンセルし、リソースの無駄を防ぎ、ユーザーエクスペリエンスを向上させることができます。
わずか数行のコードで、アプリのスケーラビリティと応答性を向上させ、ユーザーにアクションのコントロールをより多く提供できます。 まだIronPDFを試していない場合は、無料トライアルを利用して、その強力なPDF生成機能がC#プロジェクトをどのように変革できるかを発見する絶好の機会です。