ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
現代のソフトウェア開発において、効率的に長時間のタスクを管理することは、特に大規模または複雑なPDFファイルの生成が一般的なアプリケーションでは重要です。 C# 開発者は、シームレスなPDF作成のためにIronPDFに頻繁に依存していますが、潜在的に長いPDF生成タスクを処理するには、ユーザーによる中断やキャンセルを管理する方法が必要です。
そこでキャンセルトークンC#で役立ちます。 と統合することによって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 パッケージ マネージャー コンソール経由
以下の内容を日本語に翻訳してください:
ToIronPDF をインストールする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 がプロジェクトに追加されます。
壊れた画像 Pixabayから追加、ファイルから選択、またはここに画像をドラッグアンドドロップしてください。
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クラス)およびメインプログラムロジック(プログラムクラス).
IronPDFで1つまたは複数のキャンセレーショントークンを使用することで、アプリケーションのパフォーマンスとユーザーエクスペリエンスを向上させる実用的な状況がいくつかあります。 以下にいくつかの例を示します:
ウェブアプリケーションでは、ユーザーはしばしばPDF形式でのレポート作成などのアクションを開始します。 ただし、ユーザーがページから離れたり、ブラウザを閉じたりすると、システムはこれを検出し、CancellationToken を使用して PDF 生成プロセスを停止できます。
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource)
このシンプルな実装により、不要になったタスクにリソースを割り当てることなく、Webサーバーがより効果的にスケールできるようになります。
レポートアプリケーションでは、ユーザーが大規模なデータセットをPDFとしてエクスポートするよう要求することがあります。 ユーザーが気が変わったり不正確なクエリを行った場合、CancellationToken は途中でタスクをキャンセルすることを可能にし、リソースの浪費を防ぎます。
バックグラウンドサービスやマイクロサービスでは、膨大なPDFバッチの生成のような時間がかかるタスクは、CancellationToken を使用してより効率的に管理することができます。 サービスがシャットダウンまたは縮小される際、進行中のタスクはクリーンにキャンセルされ、データが失われたり破損したりすることがないように保証されます。
さて、今日のIronPDFでのcancellationtokensの使用に関する議論が終わりました。プロのようにこれらをPDFプロジェクトに導入できるようになるでしょう。! C# CancellationTokenを使用してIronPDFPDF生成タスクを優雅に処理する、より効率的で応答性の高いアプリケーションを構築できるようにします。 このアプローチは協調キャンセルモデルを可能にし、タスクが実行中のセーフポイントでキャンセル要求を確認することができるようにします。これにより、突然終了されることなく、適切なタイミングでキャンセルを行うことができます。
長時間実行されるレポート、ウェブアプリケーションでのオンデマンドPDF生成、またはバックグラウンドサービスを管理する場合、CancellationTokenや複数のトークンを同時に組み込むことで、不要なタスクをキャンセルでき、リソースの浪費を防ぎ、ユーザーエクスペリエンスを向上させます。
わずか数行のコードで、アプリのスケーラビリティと応答性を向上させ、ユーザーにアクションのコントロールをより多く提供できます。 まだIronPDFを試していない場合は、今がその絶好の機会です。無料体験その強力なPDF生成機能が、あなたのC#プロジェクトをどのように変革できるか発見してください。
10 の .NET API 製品 オフィス文書用