.NET ヘルプ

C# ConfigureAwait (開発者のための仕組み)

リーガン・パン
リーガン・パン
2024年10月24日
共有:

開発者として、非同期プログラミングは非常に有益であり、アプリケーションのパフォーマンス、効率、応答性を向上させることができます。 を使用することで、.NET、Java、Python、またはNode.(偽)**\特定のシナリオでデッドロックを避けることができます。 デッドロックは、非同期プログラミングにおいて、同期コンテキストが存在するときに発生します。(デスクトップアプリケーションのUIスレッドなど)翻訳を進める前に操作が完了することを想定しています。 それでも、待ち望まれているタスクは、同期コンテキストが利用可能になるのを待っており、循環待ちを生み出している。

本日はConfigureAwaitをIronPDFと共に使用することで、非同期プログラミングによってPDF処理タスクを効率的に実行することができます。 IronPDFはPDF関連の作業を簡単にする.NET PDFライブラリです。 堅牢な機能セット、強力なクロスプラットフォーム互換性、豊富なドキュメントを備えたこのツールは、開発者のツールキットに備えておくべき強力なPDFツールです。

C#で理解する非同期プログラミング;

非同期プログラミングとは?

非同期プログラミングとは、メインのアプリケーションスレッドから独立して特定の処理を実行できるようにするコードの記述方法を指します。 これは、I/O操作のような待機を必要とする長時間実行タスクに役立ちます。 メインスレッドをブロックすることなくこれらのタスクを実行できるようにすることで、これらのタスクの完了に時間がかかっている間もアプリケーションの実行を継続することができ、最終的にアプリケーションのパフォーマンスと応答性が向上します。

非同期コードにおけるConfigureAwaitの役割

ConfigureAwaitは、非同期プログラミングにおいて、継続の実行方法を制御するために使用されるメソッドです。 継続は、await 式の後に実行されるコードです。デフォルトでは、 `awaitは現在のコンテキストをキャプチャし、継続をそのコンテキストにマーシャ ルしようとしますが、これは効果的でないことがあります。 **ConfigureAwait**では、キャプチャしたコンテキストで継続を実行するかどうかを指定 できます。(True)**\によって示されます。(偽)**\.

を使用します。(偽)**\これは、これを使用すると、タスクに現在の同期コンテキストをキャプチャせず、元のコンテキストで再開しようとしないように指示するためです。 これにより、元のコンテキストの代わりにスレッドプールのスレッドで続きが実行されるため、メインスレッドがブロックされるのを防ぐことができます。

\コンフィギュレーションアウェイト(偽)**\ライブラリコードや、元のコンテキストの再開が不要な場合に特に有用です。

IronPDFでのConfigureAwaitの使い方

.NETプロジェクトでのIronPDFのセットアップ

.NETプロジェクトでIronPDFを使い始めるには、まずIronPDF NuGetパッケージ. tools > NuGet Package Manager > NuGet Package Manager for Solutionに移動し、IronPDFを検索することで可能です:

C# ConfigureAwait(開発者のための仕組み):図 1

あるいは、パッケージマネージャーコンソールで次のコマンドを実行してください:

Install-Package IronPdf
Install-Package IronPdf

あなたのコードでIronPDFを使い始めるには、あなたのコードファイルの先頭に "using IronPdf "ステートメントがあることを確認してください。あなたの環境でIronPDFをセットアップするためのより詳細なガイドについては、そのはじめにページ

IronPDFを使って非同期にPDFを生成する

PDFファイルを非同期に生成することは、大量のPDFファイルを生成する必要がある場合や、複数の処理を同時に実行したい場合に特に有益です。 IronPDFを使うと、PDF関連のタスクを非同期で実行することができます:

using IronPdf;
using System.Threading.Tasks;
class program
{
    static async Task Main(string[] args)
    {
        await GeneratePdfAsync();
    }
    static async Task GeneratePdfAsync()
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        string htmlContent = "<h1>Hello World!</h1>";
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
        await Task.Run(() => pdf.SaveAs("outputAsync.pdf"));
        Console.WriteLine("Working!");
    }
}
using IronPdf;
using System.Threading.Tasks;
class program
{
    static async Task Main(string[] args)
    {
        await GeneratePdfAsync();
    }
    static async Task GeneratePdfAsync()
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        string htmlContent = "<h1>Hello World!</h1>";
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
        await Task.Run(() => pdf.SaveAs("outputAsync.pdf"));
        Console.WriteLine("Working!");
    }
}

このコードでは、GeneratePdfAsyncで非同期にPDFドキュメントを作成しています。() メソッド ChromePdfRenderer(クロームPDFレンダラー)は、HTMLコンテンツからPDFファイルを作成するのに不可欠なレンダラーを作成するために使用されます。 についてPdfDocumentクラスは、提供されたHTML文字列しかし、PDFを作成するのに使うこともできます。HTMLファイル, URL, イメージなど。 IronPDFでPDFを生成するさまざまな方法については、以下をご覧ください。ハウツーセクションPDFの生成について。

大きなPDFファイルを非同期で扱う

大きな PDF ファイルを扱うときは、非同期メソッドで 〚*ConfigureAwait 〛 を使ってください。(偽).NET、Java、Python、またはNode.jsを使用するプロジェクトに携わるソフトウェア開発者を対象としています。 この例では、大きなPDFドキュメントを使用し、以下の作業を行いました。テキスト抽出タスクは、非同期PDF処理がいかに有益であるかを示すことです。

using IronPdf;
using System.Threading.Tasks;
using System.IO;
using System;
class Program
{
    static async Task Main(string[] args)
    {
        await LongPdfTask();
    }
    static async Task LongPdfTask()
    {
        try
        {
            // Initialize IronPDF's PdfDocument
            PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false);
            // Extract text from PDF asynchronously
            string text = await Task.Run(() => pdf.ExtractAllText()).ConfigureAwait(false);
            // Write the extracted text to a file asynchronously
            await Task.Run(() => File.WriteAllText("extractedText.txt", text)).ConfigureAwait(false);
            Console.WriteLine("Extraction complete!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error in GeneratePdfAsync: {ex.Message}");
        }
    }
}
using IronPdf;
using System.Threading.Tasks;
using System.IO;
using System;
class Program
{
    static async Task Main(string[] args)
    {
        await LongPdfTask();
    }
    static async Task LongPdfTask()
    {
        try
        {
            // Initialize IronPDF's PdfDocument
            PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false);
            // Extract text from PDF asynchronously
            string text = await Task.Run(() => pdf.ExtractAllText()).ConfigureAwait(false);
            // Write the extracted text to a file asynchronously
            await Task.Run(() => File.WriteAllText("extractedText.txt", text)).ConfigureAwait(false);
            Console.WriteLine("Extraction complete!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error in GeneratePdfAsync: {ex.Message}");
        }
    }
}

上記のコードでは、ⅳ***ConfigureAwait(偽)**\私たちの場合、200ページを超える大きなPDFファイルからすべてのテキストを抽出するという、大規模で時間のかかる作業で、*が使用されました。

  • インポートとセットアップ: コードの最初のセクションは、必要なライブラリと名前空間をインポートするためのものです。 IronPdfライブラリーを使うには、 `using IronPdf` を持っていることを確認する必要があります。
  • このプロジェクトのメイン・アプリケーション・コードを含むクラスを定義します。 \静的非同期タスクメイン(文字列[]引数)` はアプリケーションのエントリーポイントです。 ここでは、asyncとマークしているので、非同期操作がこの中で実行できます。 次に、await LongPdfTaskを使用します。() LongPdfTaskメソッドを非同期に呼び出す。
  • トライブロック: LongPdfTask** メソッド内のコードをトライキャッチブロックでラップし、予期しない例外を潔く処理するようにしました。

    • **PdfDocument PDF = await Task.Run(()=> PdfDocument.FromFile("サンプル.pdf")).ConfigureAwait(偽)このラインは3つのセグメントに分けられます:

      • **PdfDocument.FromFile

ファイルからPDFドキュメントをロードするためのメソッドです。指定されたファイルパスから新しい PdfDocument インスタンスを作成します。このメソッドは、指定されたファイルが存在し、アクセス可能であることを前提としています。使用方法の例は以下の通りです:

// ファイルパスを指定してPDFドキュメントをロード
PdfDocument pdf = PdfDocument.FromFile("example.pdf");
// ファイルパスを指定してPDFドキュメントをロード
PdfDocument pdf = PdfDocument.FromFile("example.pdf");

このメソッドは、PDFの内容を操作するための基礎となるもので、多くの操作をサポートしています。("サンプル.pdf")このセクションでは、指定されたPDFファイルを同期的にIronPdf.PdfDocumentオブジェクト

  * **タスク実行待ち(()=> ...):** PDF の読み込み処理を別スレッドで実行し、メインスレッドのブロックを回避します。 そのため、非同期作業となります。
  • **.コンフィギュレーション待機(偽)これにより、パフォーマンスが向上し、デッドロックが減少するはずです。
  • 文字列 text = await Task.Run(()=> pdf.ExtractAllText()).ConfigureAwait(偽)この仕事はIronPdfテキスト抽出メソッドを使用します、[ExtractAllText().](/object-reference/api/IronPdf.PdfDocument.html#IronPdf_PdfDocument_ExtractAllText_IronPdfTextExtractionOrder). 再度、タスク実行待ち(()=> ...)** は、この処理を別のスレッドで非同期に実行するために使用されます。
  • タスク実行待ち(()=> File.WriteAllText("extractedText.txt", テキスト)).ConfigureAwait(偽): これで、await Taskメソッドを使って、抽出したテキストを.txtファイルに非同期で書き込んでいます。

C# ConfigureAwait(開発者のための仕組み):図2

出力

C# ConfigureAwait(開発者のための仕組み):図3

.NETアプリケーションでConfigureAwaitを使用するためのベストプラクティス

ConfigureAwait(True)とConfigureAwait(偽)の使い分け

コンフィギュレーションアウェイト(偽) 同期コンテキストを保持する必要がないライブラリコードやバックグラウンド処理で作業している場合に最適です。 一般的には、パフォーマンスが重要なサーバーサイドのコードが対象となります。 ConfigureAwaitを使用する(偽) つまり、await** オペレーションが完了したとき、継続は必ずしも非同期オペレーションを開始したのと同じスレッド上で実行されるわけではありません。

PDF処理に関しては、*ConfigureAwaitを実装してください。(偽)複数のPDF処理タスクを実行するときに、コンテキスト切り替えに関連するボトルネックを回避するために、*パフォーマンスを最大化するのに役立ちます。 また、大量のPDFファイルを処理する際に、アプリケーションのスムーズな実行を維持したり、コンソールアプリケーションやバックグラウンドサービスで作業している場合、コンテキスト切り替えが不要になる可能性がある状況で、効率を維持するのに役立ちます。

コンフィギュレーションアウェイト(True) UI、コードの単体テスト、ASP.NETアプリケーションなど、同じコンテキストで続きが実行される必要がある場合に最適ですが、使い方を間違えるとデッドロックにつながる可能性があります。 たとえば、UIを更新したり、httpcontextにアクセスしたりする場合です。). コンフィギュレーションアウェイト(True) はデフォルトの動作であり、単にConfigureAwaitと書くこともできます。

PDF処理タスクで使用する場合、PDF処理コードがUIと緊密に統合されている場合などに特に有益です。(WPF、WinFormsなどのUIアプリケーションを使用する場合)UIスレッドでこれらの更新が行われるように、同期コンテキストをキャプチャする必要があります。 また、スレッド親和性の要件により特定のスレッドで実行する必要がある、スレッドセンシティブな操作を扱う場合にも有益です。

非同期IronPDF操作における例外処理

非同期プログラミングにおける例外処理は、留意すべき重要な側面であり、慎重に考慮する必要があります。 非同期コードの周りにtry-catchブロックを使用することは、予期しない例外を潔く処理する素晴らしい方法です。

例えば:

public async Task SafeGeneratePdfAsync()
{
    try
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);
        await Task.Run(() => pdf.SaveAs("output.pdf")).ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"An error occurred: {ex.Message}");
    }
}
public async Task SafeGeneratePdfAsync()
{
    try
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);
        await Task.Run(() => pdf.SaveAs("output.pdf")).ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"An error occurred: {ex.Message}");
    }
}

ConfigureAwaitで継続タスクを使用する場合、次のようにする。(偽)\Task.ContinueWithを使用している場合は、Task.Exception プロパティで例外を処理できます。

このためのコードの書き方の例は、次のようになります:

class program
{
    public static async Task Main(string[] args)
    {
        await ProcessPdfWithContinuationAsync();
    }
    static Task ProcessPdfWithContinuationAsync()
    {
        return Task.Run(() => PdfDocument.FromFile("Sample.pdf"))
            .ContinueWith(pdfTask =>
            {
                if (pdfTask.IsFaulted)
                {
                    // Handle exceptions from loading the PDF
                    Console.WriteLine($"Error loading PDF: {pdfTask.Exception?.GetBaseException().Message}");
                    return;
                }
                var pdf = pdfTask.Result;
                // Extract text asynchronously with exception handling
                Task.Run(() => pdf.ExtractAllText())
                    .ContinueWith(extractTask =>
                    {
                        if (extractTask.IsFaulted)
                        {
                            // Handle exceptions from extracting text
                            Console.WriteLine($"Error extracting text: {extractTask.Exception?.GetBaseException().Message}");
                            return;
                        }
                        // Proceed if text extraction is successful
                        Console.WriteLine("Extracted text:");
                        Console.WriteLine(extractTask.Result);
                    }, TaskContinuationOptions.OnlyOnRanToCompletion);
            }, TaskContinuationOptions.OnlyOnRanToCompletion);
    }
class program
{
    public static async Task Main(string[] args)
    {
        await ProcessPdfWithContinuationAsync();
    }
    static Task ProcessPdfWithContinuationAsync()
    {
        return Task.Run(() => PdfDocument.FromFile("Sample.pdf"))
            .ContinueWith(pdfTask =>
            {
                if (pdfTask.IsFaulted)
                {
                    // Handle exceptions from loading the PDF
                    Console.WriteLine($"Error loading PDF: {pdfTask.Exception?.GetBaseException().Message}");
                    return;
                }
                var pdf = pdfTask.Result;
                // Extract text asynchronously with exception handling
                Task.Run(() => pdf.ExtractAllText())
                    .ContinueWith(extractTask =>
                    {
                        if (extractTask.IsFaulted)
                        {
                            // Handle exceptions from extracting text
                            Console.WriteLine($"Error extracting text: {extractTask.Exception?.GetBaseException().Message}");
                            return;
                        }
                        // Proceed if text extraction is successful
                        Console.WriteLine("Extracted text:");
                        Console.WriteLine(extractTask.Result);
                    }, TaskContinuationOptions.OnlyOnRanToCompletion);
            }, TaskContinuationOptions.OnlyOnRanToCompletion);
    }

PDF処理のニーズにIronPDFを選ぶ理由

IronPDFの主な機能と利点

C# ConfigureAwait(開発者のための仕組み):図4

IronPDFは強力なC# PDFライブラリで、PDF関連のすべてのタスクに豊富な機能を提供します。 .NET 8、7、6、.NET Core、Standard、Frameworkをフルサポートし、Windows、Linux、Mac、Docker、Azure、AWSなどのさまざまなアプリ環境で実行できるため、どのような環境でもIronPdfを最大限に活用できます。

IronPdfを使えば、以下のような様々なファイルやデータからPDFを生成することができます。HTMLファイル, HTML文字列, URL, 画像, DOCX、およびRTF多くの場合、わずか数行のコードで! PDFドキュメントの書式を処理し、以下の機能を適用できます。カスタム透かし, PDFのマージと分割ハンドルネームPDF暗号化以下のコンテンツを日本語に翻訳してください:セキュリティなど。

IronPDFの非同期プログラミングのサポート

IronPDFは多くの処理に非同期メソッドを提供しており、開発者は非同期/待機パターンをシームレスに活用することができます。 このサポートにより、IronPDFは応答性を犠牲にすることなくパフォーマンスが重要なアプリケーションに統合でき、非同期環境でPDF関連のタスクに取り組む開発者にとって貴重なPDFツールとなります。

ライセンス

IronPDFを試してみたい、その幅広い機能を試してみたいという方は無料試用期間 素早く簡単にインストールできるIronPDFは、あなたのPDFプロジェクトですぐに稼働させることができます。IronPDFを使い続け、その強力な機能を活用してPDFのレベルアップを図りたいとお考えですか? ライセンス$749から始まり、30日間の返金保証、1年間の製品サポートとアップデートが含まれ、永久ライセンスとして提供されます。(そのため、煩わしい定期的な費用はかかりません。!)

C# ConfigureAwait(開発者のための仕組み):図5

例PDF生成のためのConfigureAwaitとIronPDFの使い方

非同期にPDFを生成するために、IronPDFを使ってHTMLファイルをレンダリングするコードを実行し、結果を保存します。(偽)** 継続が不必要に元の同期コンテキストに切り替わらないようにすること。

using IronPdf;
using System.Threading.Tasks;
using System.IO;
using System;
class program
{
    public static async Task Main(string[] args)
    {
        await CreateInvoicePdfAsync();
    }
    static async Task<string> CreateInvoicePdfAsync()
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        try
        {
            var pdf = await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(false);
            await Task.Run(() => pdf.SaveAs("invoice.pdf")).ConfigureAwait(false);
            return filePath;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
            return null;
        }
    }
}
using IronPdf;
using System.Threading.Tasks;
using System.IO;
using System;
class program
{
    public static async Task Main(string[] args)
    {
        await CreateInvoicePdfAsync();
    }
    static async Task<string> CreateInvoicePdfAsync()
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        try
        {
            var pdf = await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(false);
            await Task.Run(() => pdf.SaveAs("invoice.pdf")).ConfigureAwait(false);
            return filePath;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
            return null;
        }
    }
}

この例では、我々が作成した非同期メソッド、static async Task CreateInvoicePdfAsync を使用しています。()によって提供されたHTMLファイルからPDF請求書を生成するには、次のようにします。[RenderHtmlFileAsPdfAsyncを使用してください。](/object-reference/api/IronPdf.ChromePdfRenderer.html#IronPdf_ChromePdfRenderer_RenderHtmlFileAsPdfAsync_SystemString)メソッド。 私たちは、ConfigureAwaitを使用しています。(偽)** このタスクが元の同期コンテキストで継続されるのを防ぎ、非UIアプリケーションのパフォーマンスを向上させること。

また、await Task.Runを実装しました。())=> ...) また、非同期に操作を実行するメソッドも必要です。 最後に、pdf.SaveAsメソッドを使用して、新しく生成されたPDFファイルを「invoice.pdf」として保存しました。 CreateInvoicePdfAsyncのコード全体は、以下のとおりです。()** メソッドは、予期しない例外を処理するために、try-catch ブロックの中にラップされています。

HTMLファイル

C# ConfigureAwait(開発者のための仕組み):図6

出力

C# ConfigureAwait(開発者のための仕組み):図 7

ご覧のとおり、HTMLファイルを非同期でPDFに生成することに成功し、クリアで高品質なPDFファイルが作成されました。

結論

非同期プログラミングは、応答性の高い効率的な.NETアプリケーションを構築し、Node.jsを使用するために不可欠です。ConfigureAwait特にアプリレベルのコードを書くときに、最適なパフォーマンスを達成するのに役立ちます。 作業内容IronPDF非同期メソッドとConfigureAwaitを活用しています。(偽) PDF処理タスクがメインスレッドをブロックしないようにし、アプリケーションの全体的な応答性を向上させます。 いつ、どのようにConfigureAwaitを使用するかを理解することで、IronPDFのPDF処理タスクをより堅牢でパフォーマンスフレンドリーにすることができます。

これで、非同期プログラミングでIronPDFとともにConfigureAwaitを活用するプロとして前進することができます。 IronPDFがあなたのPDF関連プロジェクトをどのように改善できるか、今すぐお試しください。! IronPDFが強力な汎用ライブラリコードとして提供する幅広い機能についてもっと知りたい方は、ぜひ便利なハウツーガイド. 非同期プログラミングメソッドとIronPDFの併用についてもっと読みたい、あるいはIronPDF全般についてもっと知りたい場合は、以下をご覧くださいブログ記事. その他の非同期PDF生成例をお探しの場合は、以下をご覧ください。C# Wait For Seconds (C#は何秒待つのですか?この投稿、またはC#タスク.Runご提供いただきましたコンテンツが空白です。翻訳が必要な英語のテキストをお送りください。その内容を日本語に翻訳いたします。

リーガン・パン
ソフトウェアエンジニア
レーガンはリーディング大学で電子工学の学士号を取得しました。Iron Softwareに入社する前の仕事では、一つのタスクに集中して取り組んでいました。Iron Softwareでは、営業、技術サポート、製品開発、マーケティングのいずれにおいても広範な業務に携わることが最も楽しいと感じています。彼は、Iron Softwareライブラリを開発者がどのように使用しているかを理解し、その知識を使ってドキュメントを継続的に改善し、製品を開発することを楽しんでいます。
< 以前
Azureテーブル(開発者のための仕組み)
次へ >
C# Nullable Types (開発者のための仕組み)