using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
C# ConfigureAwait (Comment ça marche pour les développeurs)
Chaknith Bin
octobre 24, 2024
Partager:
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 :
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
Sortie
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.
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
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.
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 !)
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
Sortie
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 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))
Des millions d'ingénieurs dans le monde entier lui font confiance
Réservez une démo en direct gratuite
Réservez une démonstration personnelle de 30 minutes.
Pas de contrat, pas de détails de carte, pas d'engagements.
Voici ce à quoi vous pouvez vous attendre :
Une démonstration en direct de notre produit et de ses principales fonctionnalités
Obtenez des recommandations de fonctionnalités spécifiques au projet
Toutes vos questions trouvent réponse pour vous assurer de disposer de toutes les informations dont vous avez besoin. (Aucun engagement de votre part.)
CHOISIR L'HEURE
VOS INFORMATIONS
Réservez votre démo en direct gratuite
Fiable par plus de 2 millions d'ingénieurs dans le monde entier