AIDE .NET

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

En tant que développeur, la programmation asynchrone peut être extrêmement bénéfique. Elle peut améliorer les performances, l'efficacité et la réactivité de vos applications, en particulier celles qui traitent des opérations qui peuvent prendre un temps imprévisible. En utilisant `ConfigureAwait(false)`, vous pouvez éviter les blocages dans certains scénarios. Les interblocages surviennent en programmation asynchrone lorsqu'il existe un contexte de synchronisation (tel qu'un thread d'interface utilisateur dans une application de bureau) qui attend qu'une opération soit terminée avant de poursuivre. Cependant, la tâche attendue attend que le contexte de synchronisation soit disponible, ce qui crée une attente circulaire.

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

Comprendre la programmation asynchrone en C# ;

Qu'est-ce que la programmation asynchrone ?

La programmation asynchrone fait référence à une méthode d'écriture de code qui permet d'exécuter certaines opérations indépendamment du fil d'exécution principal de l'application. Ces outils sont utiles pour les tâches de longue haleine nécessitant une 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 du temps, ce qui améliore finalement les performances 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 la façon dont une suite 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 ramener la continuation à ce contexte, ce qui peut être inefficace. ConfigureAwait vous permet de spécifier si la continuation doit être exécutée dans le contexte capturé, indiqué par `ConfigureAwait(true)`, ou non, indiqué par `ConfigureAwait(false)`.

Utiliser `ConfigureAwait(false)` permet d'éviter les interblocages, car en l'utilisant, vous indiquez à la tâche de ne pas capturer le contexte de synchronisation actuel et de ne pas tenter de reprendre sur le contexte d'origine. Cela permet ensuite à la suite de s'exécuter sur un thread du pool de threads au lieu du contexte original, évitant ainsi que le thread principal ne soit bloqué.

**ConfigureAwait(false)** est particulièrement utile dans le code de bibliothèque ou dans les cas où la reprise du contexte d'origine est inutile, garantissant ainsi que le code reste flexible et exempt de situations de blocage.

Comment utiliser ConfigureAwait avec IronPDF

Installation d'IronPDF dans votre projet .NET

Pour commencer à utiliser IronPDF dans vos projets .NET, commencez par installer le paquet NuGet IronPDF. Vous pouvez le faire en naviguant vers outils > NuGet Package Manager > NuGet Package Manager for Solution et en recherchant IronPDF :

C# ConfigureAwait (Comment cela fonctionne pour les développeurs) : Figure 1

Ou encore, en exécutant la commande suivante dans la console du gestionnaire de paquets :

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText   $csharpLabel

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 détaillé sur la configuration d'IronPDF dans votre environnement, consultez sa page démarrage.

Générer des PDF de manière asynchrone avec IronPDF

La génération de fichiers PDF de manière asynchrone peut s'avérer particulièrement utile lorsque vous devez générer de grandes quantités de fichiers PDF ou que vous souhaitez effectuer plusieurs opérations simultanément. Avec IronPDF, vous pouvez effectuer des tâches liées au PDF de manière asynchrone, ce qui pourrait 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()
    {
        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!");
    }
}
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
		Dim renderer As New ChromePdfRenderer()
		Dim htmlContent As String = "<h1>Hello World!</h1>"
		Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync(htmlContent)
		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 essentiel à la création d’un fichier PDF à partir du contenu HTML. La classe PdfDocument est utilisée pour créer un PDF à partir de la chaîne HTML fournie. Cependant, vous pouvez également l'utiliser pour créer le PDF à partir d'un fichier HTML, d'une URL, d'une image, et plus encore. Pour en savoir plus sur les différentes méthodes de génération d'un PDF avec IronPDF, consultez la section guide sur la génération de PDFs.

Travailler avec des fichiers PDF volumineux de manière asynchrone

Lorsqu'on traite de grands fichiers PDF, l'utilisation de méthodes asynchrones avec `ConfigureAwait(false)` peut améliorer considérablement les performances en libérant le thread principal pendant les opérations longues. Pour cet exemple, j'ai pris un grand document PDF et effectué une 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
            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}");
        }
    }
}
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
			Dim pdf As PdfDocument = Await Task.Run(Function() PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(False)
			' Extract text from PDF asynchronously
			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 GeneratePdfAsync: {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 chronophage 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 principal de l'application pour ce projet. `static async Task Main(string[] args)` est le point d'entrée de 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 élégamment toute exception inattendue.

    • 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 PDF sur un thread séparé pour éviter de bloquer le thread principal. Il s'agit donc d'une opération asynchrone.
  • .ConfigureAwait(false): Évite de capturer le contexte actuel, ce qui devrait améliorer les performances et réduire les verrous morts.
  • string text = await Task.Run(() => pdf.ExtractAllText()).ConfigureAwait(false): Cela exécute la méthode d'extraction de texte d'IronPDF, 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 à nouveau la méthode await Task.

Avant

C# ConfigureAwait (Comment ça marche pour les développeurs) : Figure 2

Sortie

C# ConfigureAwait (Comment cela fonctionne pour les développeurs) : Figure 3

Meilleures pratiques pour l'utilisation de ConfigureAwait dans les applications .NET

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

ConfigureAwait(false) est préférable lorsque vous travaillez dans du code de bibliothèque ou un traitement en arrière-plan, où le contexte de synchronisation n'a pas besoin d'être préservé. Il s'agit généralement d'un code côté serveur où les performances sont essentielles. L'utilisation de 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, l'implémentation de ConfigureAwait(false) peut aider à maximiser les performances lors de l'exécution de plusieurs tâches de traitement PDF pour éviter les goulets d'étranglement liés au changement de contexte. Elle peut également contribuer au bon fonctionnement de l'application lors du traitement de grandes quantités de fichiers PDF, ainsi qu'au maintien de l'efficacité dans les situations où vous travaillez dans des applications de console ou des services d'arrière-plan, où le changement de contexte peut s'avérer inutile.

ConfigureAwait(true) est préférable pour les interfaces utilisateur, tout test unitaire de votre code ou les applications ASP.NET où la continuation doit s'exécuter dans le même contexte, bien que si utilisé incorrectement, cela puisse entraîner un interblocage. Par exemple, si vous mettiez à jour l'IU ou accédiez à httpcontext). ConfigureAwait(true) est le comportement par défaut, et pourrait également être écrit simplement comme ConfigureAwait.

Lorsqu'il est utilisé pour des tâches de traitement de PDF, cela peut être particulièrement bénéfique dans des situations telles que si votre code de traitement PDF est étroitement intégré à l'interface utilisateur (lors de l'utilisation d'applications UI comme WPF, WinForms, etc.), comme l'affichage de la progression, et que vous devez capturer le contexte de synchronisation pour garantir que ces mises à jour se produisent sur le thread de l'UI. Elle est également utile lorsqu'il s'agit d'opérations sensibles aux threads, qui doivent être exécutées sur un thread spécifique en raison des exigences en matière d'affinité des threads.

Gestion des exceptions dans les opérations IronPDF asynchrones

La gestion des exceptions dans la programmation asynchrone est un aspect important à garder à l'esprit et nécessite une attention particulière, car les exceptions non gérées peuvent mettre fin à l'application. L'utilisation de blocs try-catch autour du code asynchrone est un excellent moyen de gérer les exceptions inattendues de manière élégante.

Par exemple :

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}");
    }
}
Public Async Function SafeGeneratePdfAsync() As Task
	Try
		Dim renderer As New ChromePdfRenderer()
		Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(False)
		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

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

Voici un exemple de code que vous pourriez rédiger à cette fin :

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
$vbLabelText   $csharpLabel

Pourquoi choisir IronPDF pour vos besoins en matière de traitement des 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 une prise en charge complète de .NET 8, 7, 6, .NET Core, Standard et Framework, et capable de fonctionner dans une gamme d'environnements d'applications tels que Windows, Linux, Mac, Docker, Azure et AWS, vous serez en mesure de tirer le meilleur parti d'IronPDF quel que soit votre environnement de prédilection.

Avec IronPDF, vous pouvez générer des PDFs à partir de divers types de fichiers et de données, y compris des fichiers HTML, des chaînes HTML, des URLs, des images, des DOCX, et des RTF, souvent en seulement quelques lignes de code ! Il peut gérer la mise en forme de vos documents PDF, appliquer des filigranes personnalisés, fusionner et diviser des PDF, gérer le chiffrement PDF et la sécurité, et plus encore.

Prise en charge de la programmation asynchrone par IronPDF

IronPDF fournit des méthodes asynchrones pour un grand nombre de ses opérations, ce qui permet aux développeurs d'exploiter les modèles asynchrones/await de manière transparente. Cette prise en charge garantit qu'IronPDF peut être intégré dans des applications critiques en termes de performances sans sacrifier la réactivité, ce qui en fait un outil PDF inestimable pour les développeurs travaillant sur des tâches liées au 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. Grâce à son installation rapide et facile, vous pourrez faire fonctionner IronPDF dans vos projets PDF en un rien de temps. Vous souhaitez continuer à l'utiliser et à profiter de ses puissantes fonctionnalités pour améliorer votre jeu PDF ? Licences à partir de seulement $749, 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 sont fournies sous forme de licence perpétuelle (donc pas de frais récurrents désagréables !)

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

Exemple : Utilisation de 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 original.

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;
        }
    }
}
Imports IronPdf
Imports System.Threading.Tasks
Imports System.IO
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)
		Dim renderer As New ChromePdfRenderer()
		Try
			Dim pdf = Await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(False)
			Await Task.Run(Function() pdf.SaveAs("invoice.pdf")).ConfigureAwait(False)
			Return filePath
		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 asynchrone que nous avons créée, static async TaskCreateInvoicePdfAsync(), 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 poursuite de cette tâche dans le contexte de synchronisation d'origine, ce qui améliore les performances 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. Tout le code à l'intérieur de la méthode CreateInvoicePdfAsync() a été encapsulé dans un bloc try-catch pour gérer les exceptions inattendues.

Fichier HTML

C# ConfigureAwait (Comment cela fonctionne pour les développeurs) : Figure 6

Sortie

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

Comme vous pouvez le constater, nous avons réussi à générer le fichier HTML en PDF de manière asynchrone, ce qui nous a permis d'obtenir un fichier PDF clair et de haute qualité.

Conclusion

La programmation asynchrone est essentielle pour construire des applications .NET réactives et efficaces, et utiliser ConfigureAwait correctement peut vous aider à atteindre une performance optimale, surtout lors de l'écriture de code au niveau de l'application. Lorsque vous travaillez avec IronPDF, utiliser des méthodes asynchrones avec ConfigureAwait(false) garantit que vos tâches de traitement 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 PDF avec IronPDF plus robustes et favorables aux performances.

Vous pouvez maintenant avancer en tant que professionnels de l'utilisation de ConfigureAwait avec IronPDF dans la programmation asynchrone, alors qu'attendez-vous ? Essayez IronPDF dès aujourd'hui pour voir comment il peut améliorer vos projets liés aux PDF ! Si vous souhaitez en savoir plus sur la vaste gamme de fonctionnalités qu'IronPDF offre en tant que code de bibliothèque polyvalent puissant, n'hésitez pas à consulter ses pratiques guides pratiques. Ou, si vous souhaitez en savoir plus sur l'utilisation d'IronPDF avec des méthodes de programmation asynchrones, ou simplement en apprendre davantage sur IronPDF en général, consultez nos articles de blog. Si vous recherchez plus d'exemples de génération de PDF asynchrone, consultez notre article C# Wait For Seconds, ou notre autre article sur C# Task.Run.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.
< PRÉCÉDENT
Azure Tables (Comment ça marche pour les développeurs)
SUIVANT >
C# Nullable Types (How It Works For Developers) (Les types annulables en C# (Comment cela fonctionne pour les développeurs))