.NET ヘルプ

C# 非同期処理の待機 (開発者向けの仕組み)

公開済み 2025年1月14日
共有:

.NETアプリケーションでより良いPDF処理のために非同期プログラミングの力を活用しましょう。

現代のウェブおよびサーバーアプリケーションでは、パフォーマンスとスケーラビリティが最重要です。 C#で非同期プログラミングを使用して非同期および待機キーワードは、開発者がノンブロッキングで非常に応答性の高いアプリケーションを作成することを可能にします。 強力なライブラリであるIronPDFと組み合わせることで、開発者は非同期メソッドを最大限に活用できます。特にPDFの生成や操作など、I/Oバウンドのタスクを扱う際に有効です。

この記事では、非同期コードをどのように書くかを探りますIronPDF同期プログラミングと非同期プログラミングを比較し、PDF生成、テキスト抽出、操作などのタスクに関する実例を提供します。 さらに、複数のタスクを処理するためのベストプラクティスを紹介し、同期コードと非同期コードをシームレスに統合するコードの書き方を実演します。

非同期プログラミング入門

C#での非同期プログラミングは、アプリケーションがメインスレッドをブロックせずにタスクを実行するのを可能にする重要な技術です。 それは、特にデータベースクエリ、ファイルI/O、またはこの場合のPDFファイルの生成や操作など、長時間実行される操作を処理するのに非常に有益です。

IronPDFは、.NETアプリケーションにおけるPDF操作を簡素化する強力なライブラリです。 HTMLをPDFに変換したり、テキストや画像を抽出したりと、さまざまなPDF操作が可能です。 IronPDFを非同期プログラミングパターンと統合することで、開発者はPDFを扱うアプリケーションのパフォーマンスを大幅に向上させることができます。

C# における Async/Await の理解

IronPDFでasync/awaitを使用する方法に進む前に、まずこれらのキーワードが何をするのか、そして現代の.NET開発においてなぜ重要であるのかを簡単に見てみましょう。

Async/Awaitとは何ですか?

asyncおよびawaitキーワードは、C#で非同期メソッドを定義するために使用されます。 非同期メソッドは、アプリケーションのメインスレッドの実行をブロックせずに操作を実行し、長時間のタスクを実行している間もアプリケーションを応答性のある状態に保ちます。

  • async: このキーワードは、非同期操作を実行することが期待されるメソッドに適用されます。 このメソッドには少なくとも1つのawait式が含まれていることを示しています。
  • await: このキーワードは、待機されるタスクが完了するまでメソッドの実行を一時停止するために使用されます。 その操作が完了するのを待つ間、スレッドが他のタスクを実行できるようにします。
public async Task WaitExampleAsync()
{
    await Task.Delay(1000); // Waits for 1 second without blocking the thread
    Console.WriteLine("Finished waiting asynchronously!");
}
public async Task WaitExampleAsync()
{
    await Task.Delay(1000); // Waits for 1 second without blocking the thread
    Console.WriteLine("Finished waiting asynchronously!");
}
Public Async Function WaitExampleAsync() As Task
	Await Task.Delay(1000) ' Waits for 1 second without blocking the thread
	Console.WriteLine("Finished waiting asynchronously!")
End Function
VB   C#

C# 非同期処理 (開発者向けの動作方法): 図1

非同期メソッドは、タスクの完了を待っている間にメインスレッドが他の操作を処理できるようにすることで応答性を向上させます。

非同期プログラミングの主な利点

  • ノンブロッキング操作: 非同期プログラミングでは、時間のかかる操作(ファイル I/Oやネットワーク要求など)メインスレッドをブロックしないでください。 これはウェブアプリケーションにとって重要です。ノンブロッキング操作により、サーバーが複数のリクエストを同時に処理できるようにするためです。
  • 拡張されたスケーラビリティ: async キーワードにより、アプリケーションはより少ないスレッドでより多くの同時操作を処理できるようになり、スケーラビリティが向上します。
  • より良いユーザー体験: デスクトップまたはWebアプリケーションでは、非同期操作によって、タスクがバックグラウンドで実行されている間もUIがユーザーの入力に対して応答性を維持します。

同期コードと非同期コード

同期プログラミングと非同期プログラミングを使い分けるタイミングを理解することは、効率的なアプリケーション設計にとって重要です。

  • 同期プログラミングは、一度に1つの操作を実行し、操作が完了するまでメインスレッドをブロックします。 たとえば、同期コードでPDFを生成するメソッドは次のようになります。
public void GeneratePdfSync()
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf("<h1>Sync PDF</h1>");
    pdf.SaveAs("output.pdf");
}
public void GeneratePdfSync()
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf("<h1>Sync PDF</h1>");
    pdf.SaveAs("output.pdf");
}
Public Sub GeneratePdfSync()
	Dim renderer As New ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf("<h1>Sync PDF</h1>")
	pdf.SaveAs("output.pdf")
End Sub
VB   C#

シンプルですが、このアプローチは、特に複数のタスクを処理するウェブアプリケーションや重いI/Oが必要なシナリオにおいて、パフォーマンスのボトルネックを引き起こす可能性があります。

  • 非同期プログラミングにより、操作をメインスレッドをブロックせずに実行できます。 これは、非同期コードを使用してアプリケーションを応答性のある状態に保つことができるPDF生成のようなI/Oバウンドタスクに特に有益です。

    次のセクションでは、IronPDFと非同期プログラミングを統合してPDF処理を強化する方法を探ります。

IronPDFとの非同期処理・Awaitの統合

IronPDFは、PDFファイルを簡単に扱えるように設計された、.NET用の強力なPDF操作ライブラリです。 それは最小限のセットアップとコーディングの努力で、PDFからコンテンツを生成、編集、抽出する機能を提供します。 C#のasync/awaitパターンと組み合わせると、IronPDFは非ブロッキング方式でPDF関連の操作を実行でき、大量のPDF処理を必要とするアプリケーションにおけるパフォーマンスとスケーラビリティを向上させます。

IronPDFの概要

C# Async Await(開発者にとっての使い方):図2

IronPDF.NET 開発者がアプリケーションに PDF 機能を直接統合できるようにし、ウェブまたはデスクトップ環境での利用が可能となります。 以下にIronPDFの主な機能をいくつか紹介します。

  • HTMLをPDFに変換: IronPDFは変換できますHTMLコンテンツ (CSS、画像、JavaScriptを含む)完全にフォーマットされたPDFに。 これは、動的なウェブページやレポートをPDFとしてレンダリングするのに特に役立ちます。
  • PDF編集: IronPDFを使用すると、既存のPDFドキュメントにテキスト、画像、グラフィックを追加することで操作できます。また、編集既存ページの内容。
  • テキストと画像の抽出: このライブラリを使用すると、テキストと画像を抽出するPDFから、PDFコンテンツを簡単に解析および分析できるようにします。
  • フォーム入力: IronPDFはフォームの入力をサポートしています。フォームフィールドPDFで、カスタマイズされたドキュメントを生成するのに役立ちます。
  • ウォーターマーク: 追加することも可能ですウォーターマークブランディングや著作権保護のためにPDFドキュメントに。

IronPDFをAsync/Awaitと一緒に使用する理由は?

IronPDFはネイティブに非同期ではありませんが、ほとんどのPDF処理タスクがI/Oバウンド性質を持つため、async/awaitパターンに適しています。 たとえば、HTMLをPDFに変換したり、大きなPDFドキュメントを読み込んだりすることは、かなりの時間を要することがありますが、メインスレッドをブロックしないように非同期で行うことができます。

以下は、IronPDFが非同期プログラミングに適しているいくつかの例です:

  • PDF生成: アプリケーションが動的コンテンツに基づいて複数のPDFを生成する必要がある場合、これらのプロセスを非同期に実行することで、PDFが作成されている間もシステムが応答性を保つことができます。
  • PDF操作: 大きなPDFを修正する必要がある場合、例えばウォーターマークを追加したりドキュメントを結合する場合、これらのタスクを非同期で実行することで、これらの時間のかかる操作がバックグラウンドで処理される間、アプリケーションがハングしないようにできます。
  • ファイルI/O: PDFの読み取りと書き込みはI/Oバウンドの操作です。 非同期プログラミングは、システムリソースを解放し、不必要なブロッキングを回避するため、これらのタスクに最適です。

基本例: IronPDFを使用した非同期PDF生成

以下は、IronPDFを使用して非同期コードを書き、PDFファイルを生成する例です。

using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        // Initialize renderer
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF Example</h1>"));
        // Save the generated PDF to a file
        await Task.Run(() => pdf.SaveAs("output.pdf"));
    }
}
using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        // Initialize renderer
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF Example</h1>"));
        // Save the generated PDF to a file
        await Task.Run(() => pdf.SaveAs("output.pdf"));
    }
}
Imports IronPdf
Public Class Program
	Public Shared Async Function Main(ByVal args() As String) As Task
		' Initialize renderer
		Dim renderer As New ChromePdfRenderer()
		' Use Task.Run to run the PDF generation asynchronously
		Dim pdf As PdfDocument = Await Task.Run(Function() renderer.RenderHtmlAsPdf("<h1>Async PDF Example</h1>"))
		' Save the generated PDF to a file
		Await Task.Run(Function() pdf.SaveAs("output.pdf"))
	End Function
End Class
VB   C#

C# Async Await(開発者向けの動作方法):図3

仕組み

  1. HTMLからPDFへのコンバーターの作成:

    ChromePdfRendererクラスは、HTMLコンテンツをPDFに変換するために使用されます。 この例では、シンプルなHTMLコンテンツを文字列として渡します("

    非同期PDFの例

    ")ただし、実際のアプリケーションでは、これはレポートテンプレートのような動的なHTMLになる可能性があります。

  2. 非同期PDF生成のためのTask.Runの使用:

    RenderHtmlAsPdf メソッドはデフォルトでは非同期ではないため、Task.Run を使用します。()PDF生成をバックグラウンドスレッドにオフロードするために。 これは重要です。なぜなら、PDFの生成は特に大規模または複雑な文書を扱う場合、リソースを多く消費し、時間がかかることがあるからです。

  3. PDFの保存:

    PDFが生成された後、pdf.SaveAsを使用してファイルシステムに保存されます。(). この入出力操作は、Task.Runでラップされています。()ファイルを保存する際にメインスレッドをブロックしないようにするため。

  4. 操作の待機中

    await キーワードは、次の非同期操作が開始される前に、各非同期操作が完了することを保証します。 PDFの生成が完了するのを待っている間、メインスレッドは他のタスクを処理するために空いています。(例えば、Webアプリケーションで他のHTTPリクエストを処理する場合).

IronPDFで複数のタスクを処理する

大規模なPDFを扱うアプリケーションでは、分割、結合、または大きなファイルにコンテンツを追加するなど、複数の操作を行う必要があるかもしれません。 非同期を使用することで、ある操作が処理されている間も、アプリケーションはユーザー入力やリクエストに対して応答性を維持します。

たとえば、パイプラインで複数の非同期操作を組み合わせることができます。

using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument page = renderer.RenderHtmlAsPdf("<h1>Added Page</h1>");
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("output.pdf"));
        // Perform some operations asynchronously
        await Task.Run(() => pdf.ApplyWatermark("Confidential"));
        PdfDocument merged = await Task.Run(() => PdfDocument.Merge(pdf, page));
        await Task.Run(() => merged.SaveAs("processed_output.pdf"));
    }
}
using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument page = renderer.RenderHtmlAsPdf("<h1>Added Page</h1>");
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("output.pdf"));
        // Perform some operations asynchronously
        await Task.Run(() => pdf.ApplyWatermark("Confidential"));
        PdfDocument merged = await Task.Run(() => PdfDocument.Merge(pdf, page));
        await Task.Run(() => merged.SaveAs("processed_output.pdf"));
    }
}
Imports IronPdf
Public Class Program
	Public Shared Async Function Main(ByVal args() As String) As Task
		Dim renderer As New ChromePdfRenderer()
		Dim page As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Added Page</h1>")
		' Use Task.Run to run the PDF generation asynchronously
		Dim pdf As PdfDocument = Await Task.Run(Function() PdfDocument.FromFile("output.pdf"))
		' Perform some operations asynchronously
		Await Task.Run(Function() pdf.ApplyWatermark("Confidential"))
		Dim merged As PdfDocument = Await Task.Run(Function() PdfDocument.Merge(pdf, page))
		Await Task.Run(Function() merged.SaveAs("processed_output.pdf"))
	End Function
End Class
VB   C#

C# 非同期 Await (開発者向けの仕組み):図4

この例では、PDFファイルを読み込み、新しいファイルを作成し、透かしを追加し、2つのPDFを結合して保存します。すべてメインスレッドをブロックせずに行います。

IronPDFを使用した非同期操作のベストプラクティス

  • スレッドプールの考慮事項: IronPDFは処理にバックグラウンドスレッドを使用しているため、Task.Runを使用する際にはスレッドプールに注意してください。(). 高頻度のタスクには、スレッドプールを圧迫しないために、専用のバックグラウンドサービスまたはタスクのキューイングを検討してください。
  • 非同期voidメソッドを避ける: 非同期処理を行うメソッドには、常にasync Taskを使用しましょう。 非同期 void メソッドはイベントハンドラ専用に使用します。
  • キャンセレーショントークン: PDF生成やテキスト抽出のような長時間の処理には、必要に応じてユーザーが操作をキャンセルできるようにキャンセレーショントークンをサポートすることが良い方法です。 これにより、操作が不要になった場合にリソースが解放されることが保証されます。
public async Task GeneratePdfWithCancellationAsync(CancellationToken cancellationToken)
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF with Cancellation</h1>"), cancellationToken);
    if (cancellationToken.IsCancellationRequested)
    {
        Console.WriteLine("Operation was canceled.");
        return;
    }
    pdf.SaveAs("output.pdf");
}
public async Task GeneratePdfWithCancellationAsync(CancellationToken cancellationToken)
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF with Cancellation</h1>"), cancellationToken);
    if (cancellationToken.IsCancellationRequested)
    {
        Console.WriteLine("Operation was canceled.");
        return;
    }
    pdf.SaveAs("output.pdf");
}
Public Async Function GeneratePdfWithCancellationAsync(ByVal cancellationToken As CancellationToken) As Task
	Dim renderer As New ChromePdfRenderer()
	Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf("<h1>Async PDF with Cancellation</h1>"), cancellationToken)
	If cancellationToken.IsCancellationRequested Then
		Console.WriteLine("Operation was canceled.")
		Return
	End If
	pdf.SaveAs("output.pdf")
End Function
VB   C#
  • エラーハンドリング: 任意の非同期操作と同様に、ファイルアクセスの問題や無効な入力データなど、PDF処理中に発生する可能性のある例外に対して、適切なエラーハンドリングを行ってください。
try
{
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF</h1>"));
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
try
{
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF</h1>"));
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
Try
	Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf("<h1>Async PDF</h1>"))
	pdf.SaveAs("output.pdf")
Catch ex As Exception
	Console.WriteLine($"Error: {ex.Message}")
End Try
VB   C#

結論

IronPDFは、C#のasync/awaitパターンと非常にうまく連携する、多用途で強力なPDF操作ライブラリです。 IronPDFを使用した非同期プログラミングを活用することで、PDFの生成と操作を扱う.NETアプリケーションのパフォーマンスとスケーラビリティを大幅に向上させることができます。 動的なレポートの生成、ドキュメントからのデータ抽出、PDFの編集など、IronPDFの非同期プログラミングとのシームレスな統合は、現代の.NET開発者にとって優れた選択肢となります。

忘れずに探検してくださいIronPDFの無料トライアルすべての機能にアクセスできるようにし、これらの機能を自身のプロジェクトで試すことができます。 IronPDFで非同期操作を組み込むことにより、増加する作業量に対してよりスケーラブルで、より高速で効率的なアプリケーションを作成できます。

< 以前
C# イベント(開発者にとっての仕組み)
次へ >
C# Timespanフォーマット(開発者向けの仕組み)