C# Cancellationtoken (Comment ça fonctionne pour les développeurs)
Dans le développement logiciel moderne, gérer efficacement les tâches de longue durée est crucial, notamment dans les applications où la génération de fichiers PDF volumineux ou complexes est courante. Les développeurs C# s'appuient souvent sur IronPDF pour une création transparente de PDF, mais gérer des tâches potentiellement longues de génération de PDF nécessite un moyen de gérer les interruptions ou annulations des utilisateurs.
C'est là que le CancellationToken en C# intervient. En l'intégrant avec IronPDF, vous pouvez vous assurer que vos tâches de génération de PDF sont à la fois réactives et efficaces. Dans cet article, nous explorerons l'importance de CancellationToken, pourquoi il s'accorde bien avec IronPDF et comment vous pouvez l'implémenter pour annuler des tâches en douceur.
Qu'est-ce qu'un CancellationToken en C#?
Le CancellationToken est une partie fondamentale de la programmation asynchrone en C#. Il vous permet de signaler qu'une tâche doit être annulée, donnant aux développeurs un plus grand contrôle sur les opérations de longue durée. Cela peut être particulièrement utile lors de l'exécution de tâches telles que la production de rapports ou de factures, où vous pourriez vouloir générer continuellement des rapports dynamiques à partir de données jusqu'à atteindre votre objectif, moment auquel vous pouvez utiliser des tokens d'annulation en C# pour indiquer que l'opération doit être annulée, mettant ainsi fin au programme en douceur.
Comment ça fonctionne ?
En essence, un CancellationToken est passé à une tâche ou méthode, qui vérifie périodiquement si une annulation a été demandée. Si c'est le cas, la tâche peut se terminer en douceur, libérant des ressources et améliorant la réactivité de votre application. C'est particulièrement utile dans des cas comme la génération de PDF, où des documents complexes peuvent prendre du temps à être créés.
En utilisant des CancellationTokens, vous évitez les inconvénients potentiels des tâches qui s'exécutent inutilement longtemps, tels que les ressources systèmes gaspillées et une mauvaise expérience utilisateur.
Tokens d'annulation internes
En C#, un token d'annulation interne fait référence à un token d'annulation qui est créé et géré au sein d'une classe ou méthode spécifique, plutôt que passé depuis une source externe. Cela permet un contrôle plus fin de l'annulation des tâches dans le cadre d'un composant unique, lui permettant de surveiller et de répondre aux demandes d'annulation qui proviennent de l'intérieur.
Utiliser un token d'annulation interne est particulièrement utile dans des scénarios où vous souhaitez encapsuler la logique d'annulation sans l'exposer aux consommateurs de votre classe, maintenant ainsi une interface propre. Cette approche peut améliorer la modularité du code et rendre plus facile la gestion de workflows asynchrones complexes tout en profitant de la flexibilité fournie par le cadre plus large du CancellationToken.
Pourquoi utiliser un Cancellation Token avec IronPDF ?
Lors de la génération de PDFs, surtout dans les applications web ou les systèmes de reporting complexes, vous pouvez rencontrer des situations où un utilisateur lance une tâche, comme la création d'un gros fichier PDF, mais se navigue ensuite ailleurs ou n'a plus besoin du résultat. Dans ces cas, vous souhaitez avoir l'option d'annuler le processus de génération de PDF pour éviter une charge inutile sur le serveur ou l'interface utilisateur.
Voici pourquoi utiliser CancellationToken avec IronPDF est crucial :
1. Prévenir une charge inutile
Si un utilisateur n'a plus besoin du PDF qu'il a demandé, il n'y a aucune raison pour que le processus continue. En utilisant CancellationToken, vous pouvez interrompre la tâche de génération de PDF, évitant ainsi une charge excessive sur vos serveurs et améliorant les performances générales de l'application.
2. Améliorer l'expérience utilisateur
Dans les applications de bureau, la génération de PDF pourrait se produire sur le fil d'interface utilisateur, ce qui pourrait bloquer l'interface utilisateur si la tâche est de longue durée. En intégrant CancellationToken, les utilisateurs peuvent annuler la tâche et garder l'application réactive.
3. Améliorer l'évolutivité
Dans les applications web où de nombreux utilisateurs génèrent des PDFs simultanément, l'évolutivité est essentielle. CancellationToken vous permet d'annuler en toute sécurité des tâches inutiles, libérant des ressources pour gérer efficacement d'autres demandes.
Comment implémenter CancellationToken avec IronPDF
Maintenant que nous comprenons pourquoi CancellationToken est utile, voyons comment l'implémenter avec IronPDF.
Étape 1 : configurer IronPDF dans votre projet
Pour commencer à utiliser IronPDF, vous devrez d'abord l'installer. S'il est déjà installé, vous pouvez passer à la section suivante ; sinon, les étapes suivantes couvrent comment installer la bibliothèque IronPDF.
Via la console du gestionnaire de packages NuGet
Pour installer IronPDF en utilisant la console du gestionnaire de packages NuGet, ouvrez Visual Studio et accédez à la console du gestionnaire de packages. Ensuite, exécutez la commande suivante :
Install-Package IronPdf
Via le Package Manager NuGet pour la solution
En ouvrant Visual Studio, allez dans "Outils -> Package Manager NuGet -> Gérer les packages NuGet pour la solution" et recherchez IronPDF. À partir de là, il vous suffit de sélectionner votre projet et de cliquer sur "Installer", et IronPDF sera ajouté à votre projet.
Une fois que vous avez installé IronPDF, tout ce dont vous avez besoin pour commencer à utiliser IronPDF est de la déclaration using correcte en haut de votre code :
using IronPdf;
using IronPdf;
Imports IronPdf
Étape 2 : utiliser des tokens d'annulation dans une méthode asynchrone de génération de PDF
Plongeons dans l'implémentation réelle. Dans cet exemple, nous générerons un PDF simple à partir de HTML en utilisant IronPDF, mais avec un CancellationToken qui permet d'annuler la tâche si nécessaire.
using IronPdf;
using System;
using System.Threading;
using System.Threading.Tasks;
public class PdfGenerator
{
public async Task GeneratePdfWithCancellation(CancellationToken token)
{
var Renderer = new ChromePdfRenderer();
try
{
// Check for cancellation before starting
token.ThrowIfCancellationRequested();
// Simulating a long task that can be checked for cancellation periodically
for (int i = 0; i < 10; i++)
{
// Simulating a piece of work (this could be part of a larger HTML rendering)
await Task.Delay(500); // Simulate chunk processing
// Periodically check for cancellation in long-running operations
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested. Throwing exception.");
token.ThrowIfCancellationRequested(); // This will trigger an OperationCanceledException
}
}
// Simulate PDF creation after the long process
var pdf = await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>");
// Save the PDF after ensuring no cancellation occurred
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully.");
}
catch (OperationCanceledException)
{
// Handle task cancellation
Console.WriteLine("PDF generation was canceled.");
}
catch (Exception ex)
{
// Handle other exceptions
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
public class Program
{
public static async Task Main(string[] args)
{
// Create a CancellationTokenSource
var cancellationTokenSource = new CancellationTokenSource();
// Create our cancellation token
var token = cancellationTokenSource.Token;
// Start the PDF generation task
var pdfGenerator = new PdfGenerator();
Task pdfTask = pdfGenerator.GeneratePdfWithCancellation(token);
// Simulate a cancellation scenario
Console.WriteLine("Press any key to cancel PDF generation...");
Console.ReadKey();
// Cancel the task by calling Cancel() on the CancellationTokenSource
cancellationTokenSource.Cancel();
try
{
// Await the task to handle any exceptions, such as cancellation
await pdfTask;
}
catch (OperationCanceledException)
{
// Confirm the cancellation
Console.WriteLine("The PDF generation was canceled.");
}
finally
{
cancellationTokenSource.Dispose();
}
Console.WriteLine("Program finished.");
}
}
using IronPdf;
using System;
using System.Threading;
using System.Threading.Tasks;
public class PdfGenerator
{
public async Task GeneratePdfWithCancellation(CancellationToken token)
{
var Renderer = new ChromePdfRenderer();
try
{
// Check for cancellation before starting
token.ThrowIfCancellationRequested();
// Simulating a long task that can be checked for cancellation periodically
for (int i = 0; i < 10; i++)
{
// Simulating a piece of work (this could be part of a larger HTML rendering)
await Task.Delay(500); // Simulate chunk processing
// Periodically check for cancellation in long-running operations
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancellation requested. Throwing exception.");
token.ThrowIfCancellationRequested(); // This will trigger an OperationCanceledException
}
}
// Simulate PDF creation after the long process
var pdf = await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>");
// Save the PDF after ensuring no cancellation occurred
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully.");
}
catch (OperationCanceledException)
{
// Handle task cancellation
Console.WriteLine("PDF generation was canceled.");
}
catch (Exception ex)
{
// Handle other exceptions
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
public class Program
{
public static async Task Main(string[] args)
{
// Create a CancellationTokenSource
var cancellationTokenSource = new CancellationTokenSource();
// Create our cancellation token
var token = cancellationTokenSource.Token;
// Start the PDF generation task
var pdfGenerator = new PdfGenerator();
Task pdfTask = pdfGenerator.GeneratePdfWithCancellation(token);
// Simulate a cancellation scenario
Console.WriteLine("Press any key to cancel PDF generation...");
Console.ReadKey();
// Cancel the task by calling Cancel() on the CancellationTokenSource
cancellationTokenSource.Cancel();
try
{
// Await the task to handle any exceptions, such as cancellation
await pdfTask;
}
catch (OperationCanceledException)
{
// Confirm the cancellation
Console.WriteLine("The PDF generation was canceled.");
}
finally
{
cancellationTokenSource.Dispose();
}
Console.WriteLine("Program finished.");
}
}
Imports IronPdf
Imports System
Imports System.Threading
Imports System.Threading.Tasks
Public Class PdfGenerator
Public Async Function GeneratePdfWithCancellation(ByVal token As CancellationToken) As Task
Dim Renderer = New ChromePdfRenderer()
Try
' Check for cancellation before starting
token.ThrowIfCancellationRequested()
' Simulating a long task that can be checked for cancellation periodically
For i As Integer = 0 To 9
' Simulating a piece of work (this could be part of a larger HTML rendering)
Await Task.Delay(500) ' Simulate chunk processing
' Periodically check for cancellation in long-running operations
If token.IsCancellationRequested Then
Console.WriteLine("Cancellation requested. Throwing exception.")
token.ThrowIfCancellationRequested() ' This will trigger an OperationCanceledException
End If
Next i
' Simulate PDF creation after the long process
Dim pdf = Await Renderer.RenderHtmlAsPdfAsync("<h1>Hello, PDF!</h1>")
' Save the PDF after ensuring no cancellation occurred
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF generated successfully.")
Catch e1 As OperationCanceledException
' Handle task cancellation
Console.WriteLine("PDF generation was canceled.")
Catch ex As Exception
' Handle other exceptions
Console.WriteLine($"An error occurred: {ex.Message}")
End Try
End Function
End Class
Public Class Program
Public Shared Async Function Main(ByVal args() As String) As Task
' Create a CancellationTokenSource
Dim cancellationTokenSource As New CancellationTokenSource()
' Create our cancellation token
Dim token = cancellationTokenSource.Token
' Start the PDF generation task
Dim pdfGenerator As New PdfGenerator()
Dim pdfTask As Task = pdfGenerator.GeneratePdfWithCancellation(token)
' Simulate a cancellation scenario
Console.WriteLine("Press any key to cancel PDF generation...")
Console.ReadKey()
' Cancel the task by calling Cancel() on the CancellationTokenSource
cancellationTokenSource.Cancel()
Try
' Await the task to handle any exceptions, such as cancellation
Await pdfTask
Catch e1 As OperationCanceledException
' Confirm the cancellation
Console.WriteLine("The PDF generation was canceled.")
Finally
cancellationTokenSource.Dispose()
End Try
Console.WriteLine("Program finished.")
End Function
End Class
Sortie console

Sortie PDF

Dans cet exemple, nous démontrons comment utiliser un CancellationToken dans un programme C# pour annuler une tâche de génération de PDF de longue durée avec IronPDF. Le code est structuré en deux parties : le processus de génération de PDF (classe PdfGenerator) et la logique principale du programme (classe Program).
- Classe PdfGenerator: Cette classe contient une méthode qui simule la génération d'un fichier PDF tout en prenant en charge l'annulation via un CancellationToken.
- Nous créons notre source de tokens d'annulation dans la méthode main en utilisant CancellationTokenSource(), puis créons notre objet token en passant la propriété du Token du CancellationTokenSource à celle-ci.
- ChromePdfRenderer est utilisé à partir de la bibliothèque IronPDF pour rendre le contenu HTML dans un document PDF.
- La méthode GeneratePdfWithCancellation est asynchrone (
async) et renvoie une tâche. Cette méthode accepte un CancellationToken (token) pour gérer l'annulation de la tâche via la demande d'annulation. - Le CancellationToken nous permet d'annuler en toute sécurité les opérations de longue durée. Cependant, l'annulation est coopérative, ce qui signifie que la tâche elle-même doit vérifier périodiquement l'état du token.
- Dans ce code, nous simulons une longue tâche avec des vérifications d'annulation périodiques. Le point clé est que nous vérifions manuellement l'annulation (
token.IsCancellationRequested) pendant le processus de génération du PDF, prêts à exécuter la méthode d'annulation si le jeton lui est transmis. - Si l'utilisateur appuie sur une touche pour signaler l'annulation du programme, la tâche s'arrête en douceur et lance une OperationCanceledException, empêchant la réalisation de la génération du PDF de manière appropriée et en temps opportun.
- Le PDF résultant est enregistré sous "output.pdf" si aucune annulation ne s'est produite pour éviter que le programme n'exécute le processus de tâche complète.
Cas d'utilisation réels d'IronPDF avec CancellationToken
Il existe plusieurs situations pratiques où l'utilisation d'un ou plusieurs tokens d'annulation avec IronPDF peut améliorer les performances et l'expérience utilisateur de votre application. Voici quelques exemples :
1. Applications Web
Dans une application web, les utilisateurs initient souvent des actions telles que la génération de rapports au format PDF. Cependant, si l'utilisateur quitte la page ou ferme le navigateur, le système peut détecter cela et utiliser CancellationToken pour arrêter le processus de génération de PDF.
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource)
Cette implémentation simple permet aux serveurs web de s'adapter plus efficacement en ne dédiant pas de ressources à des tâches qui ne sont plus nécessaires.
2. Rapports de longue durée
Dans les applications de reporting, les utilisateurs peuvent demander à exporter de grands ensembles de données sous forme de PDFs. Si l'utilisateur change d'avis ou fait une requête incorrecte, CancellationToken vous permet d'annuler la tâche à mi-parcours, évitant ainsi le gaspillage de ressources.
3. Services en arrière-plan
Dans les services en arrière-plan ou les microservices, les tâches qui prennent un temps considérable, comme générer de gros lots de PDF, peuvent être gérées plus efficacement en utilisant CancellationToken. Lorsque le service est sur le point de s'arrêter ou d'être réduit, les tâches en cours peuvent être annulées proprement, garantissant qu'aucune donnée n'est perdue ou corrompue.
Conclusion
Maintenant que nous sommes arrivés à la fin de notre discussion d'aujourd'hui sur l'utilisation des tokens d'annulation avec IronPDF, vous serez en mesure de les implémenter dans vos projets de PDF comme un pro ! L'utilisation de C# CancellationToken avec IronPDF vous permet de créer des applications plus efficaces et réactives qui gèrent les tâches de génération de PDF en toute élégance. Cette approche permet un modèle d'annulation coopératif, permettant aux tâches de vérifier les demandes d'annulation à des points sûrs pendant l'exécution, plutôt que d'être terminées abruptement.
Que vous gériez des rapports de longue durée, une génération de PDFs à la demande dans les applications web, ou des services en arrière-plan, l'incorporation d'un CancellationToken, ou de plusieurs tokens simultanément, garantit que les tâches inutiles peuvent être annulées, évitant le gaspillage de ressources et améliorant l'expérience utilisateur.
Avec seulement quelques lignes de code, vous pouvez améliorer l'évolutivité et la réactivité de votre application tout en donnant aux utilisateurs plus de contrôle sur leurs actions. Si vous n'avez pas encore exploré IronPDF, c'est le moment idéal pour essayer la version d'essai gratuite et découvrir comment ses puissantes capacités de génération de PDF peuvent transformer vos projets C#.
Questions Fréquemment Posées
Comment puis-je utiliser un CancellationToken pour gérer des tâches de longue durée en C# ?
Vous pouvez intégrer un CancellationToken dans vos tâches de longue durée en le passant à la tâche et en vérifiant périodiquement si une annulation a été demandée. Cela permet de terminer les tâches de manière gracieuse, libérant ainsi des ressources et maintenant la réactivité de l'application.
Pourquoi un CancellationToken est-il important dans la génération de PDF ?
Dans la génération de PDF, un CancellationToken aide à gérer les ressources efficacement en permettant l'annulation des tâches si elles deviennent inutiles, par exemple lorsque l'utilisateur quitte une page. Cela empêche une charge excessive sur le serveur et améliore l'expérience utilisateur.
Comment implémenter un CancellationToken dans une tâche de génération de PDF en C# ?
Pour implémenter un CancellationToken dans une tâche de génération de PDF en C#, vous passez le token à votre méthode et vérifiez régulièrement les demandes d'annulation pendant l'exécution. Si une annulation est détectée, vous pouvez terminer la tâche gracieusement.
Quel est le but d'utiliser des méthodes asynchrones avec CancellationToken dans la génération de PDF ?
Utiliser des méthodes asynchrones avec un CancellationToken dans la génération de PDF permet aux tâches de s'exécuter de manière asynchrone, améliorant la réactivité de l'application et permettant l'annulation des tâches si elles ne sont plus nécessaires.
Comment un CancellationToken améliore-t-il l'expérience utilisateur dans les applications web ?
En utilisant un CancellationToken, les applications web peuvent annuler des tâches comme la génération de PDF lorsque l'utilisateur quitte, empêchant ainsi un traitement inutile et gardant l'application réactive, ce qui améliore l'expérience utilisateur.
Quel est le rôle de ChromePdfRenderer dans la création asynchrone de PDF ?
ChromePdfRenderer d'IronPDF est utilisé pour convertir le contenu HTML en un document PDF. Il prend en charge les opérations asynchrones, vous permettant d'utiliser un CancellationToken pour gérer le cycle de vie et la réactivité des tâches efficacement.
Que peut-il se passer si une demande d'annulation est faite pendant la génération de PDF ?
Si une demande d'annulation est faite pendant la génération de PDF, la tâche vérifiera l'état du CancellationToken. Si une annulation est détectée, elle lancera une OperationCanceledException, arrêtant le processus pour conserver les ressources.
Comment le CancellationToken améliore-t-il la scalabilité des applications ?
Le CancellationToken améliore la scalabilité en permettant aux applications d'annuler des tâches inutiles, comme lors de la génération de PDF, ce qui réduit la consommation de ressources et améliore les performances globales de l'application.
Quels sont les avantages d'utiliser un CancellationToken dans les services en arrière-plan ?
Dans les services en arrière-plan, utiliser un CancellationToken permet de gérer les tâches longues, comme le traitement par lot de PDF, en permettant d'annuler les tâches proprement lors de l'arrêt du service ou lors de l'ajustement des opérations.
Comment l'intégration du CancellationToken avec IronPDF améliore-t-elle l'efficacité de l'application ?
Intégrer le CancellationToken avec IronPDF permet une meilleure gestion des ressources en annulant les tâches de génération de PDF inutiles, ce qui améliore l'efficacité et la réactivité de l'application tout en réduisant la charge sur le serveur.




