Passer au contenu du pied de page
.NET AIDE

C# ConfigureAwait (Comment ça fonctionne pour les développeurs)

En tant que développeur, la programmation asynchrone peut être extrêmement bénéfique, car elle peut améliorer la performance, l'efficacité et la réactivité de vos applications, en particulier celles traitant des opérations pouvant prendre un temps imprévisible à terminer. En utilisant ConfigureAwait(false), vous pouvez éviter les blocages dans certains scénarios. Les blocages surviennent en programmation asynchrone lorsqu'il y a un contexte de synchronisation (comme un thread d'interface utilisateur dans une application de bureau) qui attend qu'une opération soit terminée avant de continuer. Néanmoins, la tâche attendue attend que le contexte de synchronisation soit disponible, créant ainsi une attente circulaire.

Aujourd'hui, nous examinerons comment ConfigureAwait peut être utilisé avec IronPDF pour effectuer efficacement des tâches de traitement de PDF par le biais de la programmation asynchrone. IronPDF est une bibliothèque PDF pour .NET qui facilite la gestion des tâches liées aux PDF. Avec un ensemble de fonctionnalités robustes, une forte compatibilité multiplateforme et une documentation étendue, c'est un outil PDF puissant à avoir dans votre boîte à outils de développeur.

Comprendre la Programmation Asynchrone en C#

Qu'est-ce que la Programmation Asynchrone?

La programmation asynchrone se réfère à une méthode d'écriture de code qui permet à certaines opérations de s'exécuter indépendamment du thread principal de l'application. C'est utile pour des tâches de longue durée nécessitant de l'attente, telles que les opérations d'entrée/sortie. En permettant à ces tâches de s'exécuter sans bloquer le thread principal, l'application peut continuer à fonctionner pendant que ces tâches prennent le temps de se terminer, améliorant ainsi la performance et la réactivité de l'application.

Le Rôle de ConfigureAwait dans le Code Asynchrone

ConfigureAwait est une méthode en programmation asynchrone utilisée pour contrôler comment une continuation est exécutée. La continuation est le code qui s'exécute après une expression await, par défaut await capture le contexte actuel et essaie de transférer la continuation de nouveau à ce contexte, ce qui peut être inefficace. ConfigureAwait vous permet de spécifier si la continuation doit s'exécuter sur le contexte capturé, indiqué par ConfigureAwait(true), ou non, indiqué par ConfigureAwait(false).

En utilisant ConfigureAwait(false), vous aiderez à éviter les blocages, car cela indique à la tâche de ne pas capturer le contexte de synchronisation actuel et de ne pas tenter de reprendre le contexte d'origine. Cela permet alors à la continuation de s'exécuter sur un thread de pool de threads au lieu du contexte d'origine, prévenant ainsi le blocage du thread principal.

ConfigureAwait(false) est particulièrement utile dans le code de bibliothèque ou dans des cas où reprendre le contexte d'origine n'est pas nécessaire, assurant ainsi que le code reste flexible et exempt de blocages.

Comment Utiliser ConfigureAwait avec IronPDF

Configurer IronPDF dans Votre Projet .NET

Pour commencer à utiliser IronPDF dans vos projets .NET, commencez par installer le package NuGet IronPDF. Vous pouvez le faire en naviguant vers Outils > Gestionnaire de package NuGet > Gestionnaire de package NuGet pour la Solution et en recherchant IronPDF :

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 1

Ou, alternativement, exécuter la commande suivante dans la Console du gestionnaire de packages :

Install-Package IronPdf

Pour commencer à utiliser IronPDF dans votre code, assurez-vous d'avoir placé l'instruction using IronPdf; en haut de votre fichier de code. Pour un guide plus approfondi afin de configurer IronPDF dans votre environnement, consultez sa page de démarrage.

Générer des PDF de Manière Asynchrone avec IronPDF

Générer des fichiers PDF de façon asynchrone peut être particulièrement bénéfique dans des situations où vous avez besoin de générer de grandes quantités de fichiers PDF ou souhaitez effectuer plusieurs opérations simultanément. Avec IronPDF, vous pouvez effectuer des tâches liées aux PDF de manière asynchrone, ce qui peut ressembler au code asynchrone suivant :

using IronPdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await GeneratePdfAsync();
    }

    static async Task GeneratePdfAsync()
    {
        // Create a new instance of ChromePdfRenderer.
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Example HTML content to be converted into a PDF.
        string htmlContent = "<h1>Hello World!</h1>";

        // Asynchronously render the HTML content as a PDF document.
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);

        // Asynchronously save the PDF document to a file.
        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()
    {
        // Create a new instance of ChromePdfRenderer.
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Example HTML content to be converted into a PDF.
        string htmlContent = "<h1>Hello World!</h1>";

        // Asynchronously render the HTML content as a PDF document.
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);

        // Asynchronously save the PDF document to a file.
        await Task.Run(() => pdf.SaveAs("outputAsync.pdf"));

        Console.WriteLine("Working!");
    }
}
Imports IronPdf
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		Await GeneratePdfAsync()
	End Function

	Private Shared Async Function GeneratePdfAsync() As Task
		' Create a new instance of ChromePdfRenderer.
		Dim renderer As New ChromePdfRenderer()

		' Example HTML content to be converted into a PDF.
		Dim htmlContent As String = "<h1>Hello World!</h1>"

		' Asynchronously render the HTML content as a PDF document.
		Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync(htmlContent)

		' Asynchronously save the PDF document to a file.
		Await Task.Run(Function() pdf.SaveAs("outputAsync.pdf"))

		Console.WriteLine("Working!")
	End Function
End Class
$vbLabelText   $csharpLabel

Dans ce code, nous avons créé un document PDF de manière asynchrone dans la méthode GeneratePdfAsync(). ChromePdfRenderer est utilisé pour créer le moteur de rendu qui est essentiel pour créer un fichier PDF à partir du contenu HTML. The PdfDocument class is used to create a PDF from the provided HTML string, however, you could also use it to create the PDF from an HTML file, URL, image, and more. Pour en savoir plus sur les différentes méthodes de génération d'un PDF avec IronPDF, consultez la section comment faire sur la génération de PDFs.

Travailler avec de Grands Fichiers PDF de Manière Asynchrone

Lors de la gestion de grands fichiers PDF, utiliser des méthodes asynchrones avec ConfigureAwait(false) peut améliorer significativement la performance en libérant le thread principal pendant les opérations longues. Pour cet exemple, j'ai pris un grand document PDF et effectué une tâche d'extraction de texte pour démontrer à quel point le traitement asynchrone des PDF est bénéfique.

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 asynchronously.
            PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false);

            // Extract text from PDF asynchronously with ConfigureAwait to prevent context capture.
            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 LongPdfTask: {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 asynchronously.
            PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false);

            // Extract text from PDF asynchronously with ConfigureAwait to prevent context capture.
            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 LongPdfTask: {ex.Message}");
        }
    }
}
Imports IronPdf
Imports System.Threading.Tasks
Imports System.IO
Imports System

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		Await LongPdfTask()
	End Function

	Private Shared Async Function LongPdfTask() As Task
		Try
			' Initialize IronPDF's PdfDocument asynchronously.
			Dim pdf As PdfDocument = Await Task.Run(Function() PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(False)

			' Extract text from PDF asynchronously with ConfigureAwait to prevent context capture.
			Dim text As String = Await Task.Run(Function() pdf.ExtractAllText()).ConfigureAwait(False)

			' Write the extracted text to a file asynchronously.
			Await Task.Run(Sub() File.WriteAllText("extractedText.txt", text)).ConfigureAwait(False)

			Console.WriteLine("Extraction complete!")
		Catch ex As Exception
			Console.WriteLine($"Error in LongPdfTask: {ex.Message}")
		End Try
	End Function
End Class
$vbLabelText   $csharpLabel

Dans le code ci-dessus, ConfigureAwait(false) est utilisé pendant la tâche longue et consommatrice de temps d'extraction de tout le texte d'un grand fichier PDF, qui faisait plus de 200 pages dans notre cas.

  • Imports et Configuration : La première section en haut de notre code est dédiée à l'importation des bibliothèques et espaces de noms nécessaires. Vous devez vous assurer d'avoir using IronPdf; pour utiliser la bibliothèque IronPDF.
  • Classe et Méthode Principale : class Program définit la classe qui contient le code d'application principale pour ce projet. static async Task Main(string[] args) est le point d'entrée pour l'application. Ici, nous l'avons marqué comme async afin que nos opérations asynchrones puissent s'exécuter à partir de celui-ci. Ensuite, nous utilisons await LongPdfTask() pour appeler la méthode LongPdfTask de manière asynchrone.
  • Bloc Try : J'ai enveloppé le code dans la méthode LongPdfTask dans un bloc try-catch pour gérer gracieusement toute exception imprévue.

    • PdfDocument PDF = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false): Cette ligne peut être décomposée en trois segments différents :

    • PdfDocument.FromFile("Sample.pdf"): Cette section charge de manière synchrone le fichier PDF spécifié dans un objet IronPdf.PdfDocument.
    • await Task.Run(() => ...): Exécute l'opération de chargement de PDF sur un thread séparé pour éviter de bloquer le thread principal. Cela en fait une opération asynchrone.
    • .ConfigureAwait(false): Évite de capturer le contexte actuel, ce qui devrait améliorer la performance et réduire les blocages.
  • string text = await Task.Run(() => pdf.ExtractAllText()).ConfigureAwait(false): This runs the IronPDF text extraction method, ExtractAllText(). Encore une fois, await Task.Run(() => ...) est utilisé pour exécuter cette opération de manière asynchrone sur un thread séparé.
  • await Task.Run(() => File.WriteAllText("extractedText.txt", text)).ConfigureAwait(false): Avec cela, nous écrivons le texte extrait dans un fichier .txt de manière asynchrone en utilisant la méthode await Task une fois de plus.

Avant

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 2

Sortie

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 3

Meilleures Pratiques pour Utiliser ConfigureAwait dans les Applications .NET

Quand Utiliser ConfigureAwait(true) vs. ConfigureAwait(false)

ConfigureAwait(false) est préférable lorsque vous travaillez dans le code des bibliothèques ou de traitement en arrière-plan, où le contexte de synchronisation ne doit pas être préservé. Habituellement, c'est pour le code côté serveur où la performance est essentielle. Utiliser ConfigureAwait(false) signifie que lorsque l'opération await est terminée, la continuation ne s'exécute pas nécessairement sur le même thread qui a démarré l'opération asynchrone.

En ce qui concerne le traitement des PDF, implémenter ConfigureAwait(false) peut aider à maximiser la performance lors de l'exécution de plusieurs tâches de traitement de PDF pour aider à éviter les goulets d'étranglement liés au changement de contexte. Cela peut également aider à maintenir le bon fonctionnement de l'application lors du traitement de grandes quantités de fichiers PDF, et simplement aider à maintenir l'efficacité dans les situations où vous travaillez dans des applications console ou des services d'arrière-plan, où le changement de contexte pourrait être inutile.

ConfigureAwait(true) est mieux utilisé dans l'interface utilisateur, tout test unitaire pour votre code, ou dans des applications ASP.NET où la continuation doit s'exécuter dans le même contexte, bien que mal utilisé, cela puisse conduire à un blocage. Par exemple, si vous mettiez à jour l'interface utilisateur ou accédiez à httpcontext). ConfigureAwait(true) est le comportement par défaut, et pourrait également être simplement écrit comme ConfigureAwait.

Lorsqu'il est utilisé avec des tâches de traitement de PDF, il peut être particulièrement bénéfique dans des situations telles que si votre code de traitement de PDF est étroitement intégré à l'interface utilisateur (lors de l'utilisation d'applications UI telles que WPF, WinForms, etc.), comme l'affichage de la progression, et que vous avez besoin de capturer le contexte de synchronisation pour assurer ces mises à jour sur le thread de l'interface utilisateur. Il est également bénéfique lorsque vous travaillez avec des opérations sensibles au thread, qui doivent être exécutées sur un thread spécifique en raison d'exigences d'affinité de thread.

Gérer les Exceptions dans les Opérations Asynchrones d'IronPDF

Gérer les exceptions en programmation asynchrone est un aspect important à garder à l'esprit et nécessite une considération attentive, car les exceptions non gérées peuvent entraîner l'arrêt de l'application. Utiliser des blocs try-catch autour du code asynchrone est un excellent moyen de gérer gracieusement toute exception inattendue.

Par exemple :

public async Task SafeGeneratePdfAsync()
{
    try
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Asynchronously render HTML as PDF and do not capture the context
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);

        // Asynchronously save PDF to file
        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();

        // Asynchronously render HTML as PDF and do not capture the context
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);

        // Asynchronously save PDF to file
        await Task.Run(() => pdf.SaveAs("output.pdf")).ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"An error occurred: {ex.Message}");
    }
}
Public Async Function SafeGeneratePdfAsync() As Task
	Try
		Dim renderer As New ChromePdfRenderer()

		' Asynchronously render HTML as PDF and do not capture the context
		Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(False)

		' Asynchronously save PDF to file
		Await Task.Run(Function() pdf.SaveAs("output.pdf")).ConfigureAwait(False)
	Catch ex As Exception
		Console.WriteLine($"An error occurred: {ex.Message}")
	End Try
End Function
$vbLabelText   $csharpLabel

Lors de l'utilisation de tâches de continuation avec ConfigureAwait(false), les exceptions peuvent être gérées à l'aide de try-catch dans la continuation, ou par la propriété Task.Exception si vous utilisez Task.ContinueWith.

Un exemple de comment vous pourriez écrire du code pour faire cela pourrait ressembler à :

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);
    }
}
Friend Class Program
	Public Shared Async Function Main(ByVal args() As String) As Task
		Await ProcessPdfWithContinuationAsync()
	End Function

	Private Shared Function ProcessPdfWithContinuationAsync() As Task
		Return Task.Run(Function() PdfDocument.FromFile("Sample.pdf")).ContinueWith(Sub(pdfTask)
				If pdfTask.IsFaulted Then
					' Handle exceptions from loading the PDF
					Console.WriteLine($"Error loading PDF: {pdfTask.Exception?.GetBaseException().Message}")
					Return
				End If
				Dim pdf = pdfTask.Result
				' Extract text asynchronously with exception handling
				Task.Run(Function() pdf.ExtractAllText()).ContinueWith(Sub(extractTask)
						If extractTask.IsFaulted Then
							' Handle exceptions from extracting text
							Console.WriteLine($"Error extracting text: {extractTask.Exception?.GetBaseException().Message}")
							Return
						End If
						' Proceed if text extraction is successful
						Console.WriteLine("Extracted text:")
						Console.WriteLine(extractTask.Result)
				End Sub, TaskContinuationOptions.OnlyOnRanToCompletion)
		End Sub, TaskContinuationOptions.OnlyOnRanToCompletion)
	End Function
End Class
$vbLabelText   $csharpLabel

Pourquoi Choisir IronPDF pour vos Besoins de Traitement de PDF?

Principales Caractéristiques et Avantages d'IronPDF

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 4

IronPDF est une puissante bibliothèque PDF C# qui offre un riche ensemble de fonctionnalités pour toutes vos tâches liées aux PDF. Avec un support complet pour .NET 8, 7, 6, .NET Core, Standard, et Framework, et capable de fonctionner dans une gamme d'environnements applicatifs tels que Windows, Linux, Mac, Docker, Azure et AWS, vous serez en mesure d'obtenir le meilleur d'IronPDF quel que soit votre environnement préféré.

With IronPDF, you can generate PDFs from various file and data types; including HTML files, HTML string, URLs, images, DOCX, and RTF, often in just a few lines of code! It can handle the formatting of your PDF documents, apply custom watermarks, merge and split PDFs, handle PDF encryption and security, and more.

Support d'IronPDF pour la Programmation Asynchrone

IronPDF offre des méthodes asynchrones pour bon nombre de ses opérations, permettant aux développeurs de tirer parti des modèles async/await en toute transparence. Ce support assure qu'IronPDF peut être intégré dans des applications où la performance est cruciale sans sacrifier la réactivité, en faisant un outil PDF inestimable pour les développeurs travaillant sur des tâches liées aux PDF dans un environnement asynchrone.

Licences

Si vous souhaitez essayer IronPDF par vous-même et explorer sa large gamme de fonctionnalités, vous pouvez facilement le faire grâce à sa période d' essai gratuit. Avec une installation rapide et facile, vous serez en mesure d'avoir IronPDF opérationnel dans vos projets PDF en un rien de temps. Vous voulez continuer à l'utiliser et profiter de ses puissantes fonctionnalités pour améliorer votre expérience avec les PDFs? Les licences commencent à seulement $799, et sont accompagnées d'une généreuse garantie de remboursement de 30 jours, d'une année entière de support produit et de mises à jour, et viennent sous forme de licence perpétuelle (Donc, pas de frais récurrents ennuyeux!)

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 5

Exemple : Utiliser ConfigureAwait et IronPDF pour la Génération de PDF

Pour générer un PDF de manière asynchrone, nous utiliserons IronPDF pour exécuter le code de rendu du fichier HTML, et enregistrer le résultat, tout en utilisant ConfigureAwait(false) pour garantir que la continuation ne revient pas inutilement au contexte de synchronisation d'origine.

using IronPdf;
using System.Threading.Tasks;
using System;

class Program
{
    public static async Task Main(string[] args)
    {
        await CreateInvoicePdfAsync();
    }

    static async Task<string> CreateInvoicePdfAsync()
    {
        // Instance of ChromePdfRenderer to convert HTML to PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        try
        {
            // Render HTML file as a PDF asynchronously without capturing the context.
            var pdf = await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(false);

            // Save the generated PDF asynchronously.
            await Task.Run(() => pdf.SaveAs("invoice.pdf")).ConfigureAwait(false);

            return "invoice.pdf";
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
            return null;
        }
    }
}
using IronPdf;
using System.Threading.Tasks;
using System;

class Program
{
    public static async Task Main(string[] args)
    {
        await CreateInvoicePdfAsync();
    }

    static async Task<string> CreateInvoicePdfAsync()
    {
        // Instance of ChromePdfRenderer to convert HTML to PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        try
        {
            // Render HTML file as a PDF asynchronously without capturing the context.
            var pdf = await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(false);

            // Save the generated PDF asynchronously.
            await Task.Run(() => pdf.SaveAs("invoice.pdf")).ConfigureAwait(false);

            return "invoice.pdf";
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
            return null;
        }
    }
}
Imports IronPdf
Imports System.Threading.Tasks
Imports System

Friend Class Program
	Public Shared Async Function Main(ByVal args() As String) As Task
		Await CreateInvoicePdfAsync()
	End Function

	Private Shared Async Function CreateInvoicePdfAsync() As Task(Of String)
		' Instance of ChromePdfRenderer to convert HTML to PDF
		Dim renderer As New ChromePdfRenderer()
		Try
			' Render HTML file as a PDF asynchronously without capturing the context.
			Dim pdf = Await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(False)

			' Save the generated PDF asynchronously.
			Await Task.Run(Function() pdf.SaveAs("invoice.pdf")).ConfigureAwait(False)

			Return "invoice.pdf"
		Catch ex As Exception
			Console.WriteLine($"Error generating PDF: {ex.Message}")
			Return Nothing
		End Try
	End Function
End Class
$vbLabelText   $csharpLabel

Dans cet exemple, nous utilisons la méthode async que nous avons créée, static async Task CreateInvoicePdfAsync(), pour générer une facture PDF à partir du fichier HTML fourni par la méthode RenderHtmlFileAsPdfAsync. Nous avons utilisé ConfigureAwait(false) pour empêcher la continuation de cette tâche dans le contexte de synchronisation d'origine, améliorant ainsi la performance de notre application non-UI.

Nous avons également implémenté à nouveau la méthode await Task.Run()) => ...) pour exécuter les opérations de manière asynchrone. Enfin, nous avons enregistré le fichier PDF nouvellement généré sous le nom "invoice.pdf" en utilisant la méthode pdf.SaveAs. L'ensemble du code dans la méthode CreateInvoicePdfAsync() a été enveloppé dans un bloc try-catch pour gérer toute exception inattendue.

Fichier HTML

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 6

Sortie

C# ConfigureAwait (Comment ça Fonctionne Pour Les Développeurs): Figure 7

Comme vous pouvez le voir, nous avons réussi à générer le fichier HTML en PDF de manière asynchrone, et cela a créé un fichier PDF clair et de haute qualité pour nous.

Conclusion

La programmation asynchrone est essentielle pour construire des applications .NET réactives et efficaces, et utiliser ConfigureAwait correctement peut vous aider à atteindre des performances optimales, surtout lorsque vous écrivez du code au niveau de l'application. Lorsque vous travaillez avec IronPDF, tirer parti des méthodes asynchrones en conjonction avec ConfigureAwait(false) garantit que vos tâches de traitement de PDF ne bloquent pas le thread principal, améliorant ainsi la réactivité globale de votre application. En comprenant quand et comment utiliser ConfigureAwait, vous pouvez rendre vos tâches de traitement de PDF avec IronPDF plus robustes et performantes.

Maintenant, vous pouvez avancer en tant que pros dans l'utilisation de ConfigureAwait avec IronPDF dans la programmation asynchrone, alors qu'attendez-vous? Essayez IronPDF aujourd'hui pour voir comment il peut améliorer vos projets liés aux PDFs! Si vous souhaitez en savoir plus sur la vaste gamme de fonctionnalités qu'IronPDF a à offrir en tant que bibliothèque de code général puissante, assurez-vous de consulter ses guides pratiques. Ou, si vous souhaitez en savoir plus sur l'utilisation d'IronPDF avec les méthodes de programmation asynchrone, ou simplement apprendre plus sur IronPDF en général, consultez nos articles de blog. If you're looking for more asynchronous PDF generation examples, check out our C# Wait For Seconds post, or our other one on C# Task.Run.

Questions Fréquemment Posées

Qu'est-ce que ConfigureAwait en programmation asynchrone ?

ConfigureAwait est une méthode utilisée en programmation asynchrone pour spécifier si une continuation après une expression await doit s'exécuter sur le contexte de synchronisation original ou un autre. Utiliser ConfigureAwait(false) peut aider à éviter les verrous en ne capturant pas le contexte de synchronisation.

Comment puis-je générer des PDF de manière asynchrone en C# ?

Vous pouvez générer des PDF de manière asynchrone en C# en utilisant les méthodes asynchrones d'IronPDF. Cela améliore l'efficacité et la réactivité, notamment lors du traitement de fichiers volumineux, en ne bloquant pas le thread principal de l'application.

Pourquoi devrais-je utiliser ConfigureAwait(false) dans mes applications C# ?

L'utilisation de ConfigureAwait(false) dans vos applications C# améliore les performances en permettant aux continuations de s'exécuter sur un thread de pool, évitant ainsi les changements de contexte inutiles et les verrous potentiels, en particulier dans le code de bibliothèque.

Quels sont les avantages d'utiliser IronPDF pour le traitement des PDF dans .NET ?

IronPDF offre des fonctionnalités étendues telles que la génération de PDF, l'extraction de texte et la fusion, en plus d'une excellente compatibilité multiplateforme. Il prend en charge la programmation asynchrone, ce qui le rend adapté aux applications critiques en termes de performances.

Comment puis-je gérer les exceptions dans les tâches de traitement de PDF asynchrones ?

Les exceptions dans les tâches de traitement de PDF asynchrones peuvent être gérées à l'aide de blocs try-catch autour des méthodes asynchrones. IronPDF vous permet de gérer les exceptions de manière élégante, garantissant ainsi la stabilité de votre application.

Comment les méthodes asynchrones améliorent-elles le traitement des PDF avec IronPDF ?

Les méthodes asynchrones dans IronPDF vous permettent d'exécuter des tâches de traitement de PDF sans bloquer le thread principal de l'application. Cela conduit à une meilleure réactivité et efficacité de l'application, en particulier pour les opérations PDF volumineuses ou complexes.

Quelles sont les principales considérations pour utiliser ConfigureAwait dans le code de bibliothèque ?

Lors de l'utilisation de ConfigureAwait dans le code de bibliothèque, il est important d'utiliser ConfigureAwait(false) pour éviter de capturer le contexte de synchronisation, améliorant ainsi la performance et empêchant les verrous dans les opérations asynchrones.

Comment configurer IronPDF dans un projet C# ?

Pour configurer IronPDF dans un projet C#, vous pouvez utiliser le gestionnaire de paquets NuGet en recherchant IronPDF ou exécuter la commande Install-Package IronPdf dans la console du gestionnaire de paquets.

Qu'est-ce qui rend IronPDF un outil précieux pour les développeurs ?

IronPDF est un outil précieux pour les développeurs en raison de sa robustesse, comprenant la génération de PDF, l'extraction de texte et le chiffrement. Il prend en charge le traitement asynchrone, aidant les développeurs à créer des applications réactives et efficaces.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite