Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
En el desarrollo de software moderno, gestionar tareas de larga duración de manera eficiente es fundamental, especialmente en aplicaciones donde la generación de archivos PDF grandes o complejos es común. Los desarrolladores de C# a menudo confían en IronPDF para la creación fluida de PDFs, pero manejar tareas potencialmente extensas de generación de PDFs requiere una forma de gestionar interrupciones o cancelaciones por parte del usuario.
Aquí es donde elCancellationTokenen C# entra en juego. Al integrarlo conIronPDF, puede asegurarse de que sus tareas de generación de PDF sean tanto receptivas como eficientes. En este artículo, exploraremos la importancia de CancellationToken, por qué se complementa bien con IronPDF y cómo puedes implementarlo para cancelar tareas de manera elegante.
El CancellationToken es una parte fundamental de la programación asincrónica en C#. Permite indicar que una tarea debe cancelarse, otorgando a los desarrolladores un mayor control sobre las operaciones de larga duración. Esto puede ser especialmente útil al realizar tareas como la producción de informes o facturas, donde podrías querer generar continuamente informes dinámicos a partir de datos hasta alcanzar tu objetivo, momento en el cual puedes usar tokens de cancelación de C# para indicar que la operación debe ser cancelada, lo que termina el programa de manera elegante.
En esencia, se pasa un CancellationToken a una tarea o método, que verifica periódicamente si se ha solicitado la cancelación. Si es así, la tarea puede terminar elegantemente, liberando recursos y mejorando la capacidad de respuesta de su aplicación. Esto es particularmente útil en casos como la generación de PDF, donde la creación de documentos complejos puede llevar tiempo.
Al utilizar CancellationTokens, evitas los posibles inconvenientes de las tareas que se ejecutan innecesariamente mucho tiempo, como el desperdicio de recursos del sistema y una mala experiencia de usuario.
En C#, un token de cancelación interno se refiere a un token de cancelación que se crea y gestiona dentro de una clase o método específico, en lugar de ser pasado desde una fuente externa. Esto permite un control más preciso sobre la cancelación de tareas dentro del ámbito de un solo componente, permitiéndole supervisar y responder a solicitudes de cancelación que se originan internamente.
Usar un token de cancelación interno es particularmente útil en escenarios donde quieres encapsular la lógica de cancelación sin exponerla a los consumidores de tu clase, manteniendo así una interfaz limpia. Este enfoque puede mejorar la modularidad del código y facilitar la gestión de flujos de trabajo asincrónicos complejos mientras se sigue aprovechando la flexibilidad proporcionada por el marco más amplio de CancellationToken.
Al generar PDFs, especialmente en aplicaciones web o sistemas de informes complejos, podrías encontrarte con situaciones donde un usuario inicia una tarea, como crear un archivo PDF grande, pero luego navega fuera o ya no requiere el resultado. En estos casos, desea tener la opción de cancelar el proceso de generación de PDF para evitar una carga innecesaria en el servidor o la interfaz de usuario.
Aquí está la razón por la cual usar CancellationToken con IronPDF es crucial:
Si un usuario ya no necesita el PDF que solicitó, no hay razón para que el proceso continúe. Al utilizar CancellationToken, puedes detener la tarea de generación de PDF, evitando una carga excesiva en tus servidores y mejorando el rendimiento general de la aplicación.
En las aplicaciones de escritorio, la generación de PDF podría ocurrir en el hilo de la interfaz de usuario, lo que podría bloquear la interfaz si la tarea es de larga duración. Al incorporar CancellationToken, los usuarios pueden cancelar la tarea y mantener la aplicación receptiva.
En aplicaciones web donde numerosos usuarios generan PDFs simultáneamente, la escalabilidad es clave. CancellationToken te permite cancelar de manera segura las tareas innecesarias, liberando recursos para manejar otras solicitudes de manera eficiente.
Ahora que entendemos por qué CancellationToken es útil, revisemos cómo implementarlo con IronPDF.
Para empezar a utilizarIronPDF, primero necesitarás instalarlo. Si ya está instalado, puede pasar a la siguiente sección, de lo contrario, los siguientes pasos cubren cómo instalar la biblioteca IronPDF.
A través de la Consola del Administrador de Paquetes NuGet
Ainstalar IronPDFusando la Consola del Administrador de Paquetes de NuGet, abre Visual Studio y navega a la Consola del Administrador de Paquetes. Luego ejecute el siguiente comando:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
A través del Administrador de Paquetes NuGet para la Solución
Abriendo Visual Studio, vaya a "herramientas -> Administrador de paquetes NuGet -> Administrar paquetes NuGet para la solución" y busque IronPDF. Desde aquí, todo lo que necesitas hacer es seleccionar tu proyecto y hacer clic en "Instalar", y IronPDF se añadirá a tu proyecto.
Imagen rota Añadir desde Pixabay, seleccionar de tus archivos o arrastrar y soltar una imagen aquí.
Una vez que hayas instalado IronPDF, todo lo que necesitas agregar para comenzar a usar IronPDF es la declaración using correcta en la parte superior de tu código:
using IronPdf;
using IronPdf;
Imports IronPdf
Vamos a sumergirnos en la implementación real. En este ejemplo, generaremos un PDF simple a partir de HTML usando IronPDF, pero con un CancellationToken que permite cancelar la tarea si es necesario.
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();
// Creating our one 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();
// Creating our one 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()
' Creating our one 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
Salida de Consola
Salida PDF
En este ejemplo, demostramos cómo usar un CancellationToken en un programa C# para cancelar una tarea de generación de PDF de larga duración con IronPDF. El código está estructurado en dos partes: el proceso de generación de PDF(Clase PdfGenerator)y la lógica principal del programa(Clase Program).
Creamos nuestra fuente de token de cancelación en el método main usando CancellationTokenSource(), y luego crear nuestro objeto de token pasando la propiedad Token de CancellationTokenSource** a él.
***Renderizador de PDF cromadose utiliza de la biblioteca IronPDF para renderizar contenido HTML en un documento PDF.
Existen varias situaciones prácticas en las que el uso de uno o múltiples Cancellation Tokens con IronPDF puede mejorar el rendimiento y la experiencia del usuario de su aplicación. He aquí algunos ejemplos:
En una aplicación web, los usuarios a menudo inician acciones como generar informes en formato PDF. Sin embargo, si el usuario se aleja de la página o cierra el navegador, el sistema puede detectar esto y usar CancellationToken para detener el proceso de generación de PDF.
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource);
HttpContext.Response.RegisterForDispose(CancellationTokenSource)
Esta sencilla implementación permite a los servidores web escalar de manera más efectiva al no dedicar recursos a tareas que ya no son necesarias.
En aplicaciones de informes, los usuarios pueden solicitar que grandes conjuntos de datos sean exportados como PDF. Si el usuario cambia de opinión o realiza una consulta incorrecta, CancellationToken permite cancelar la tarea a mitad del camino, evitando el desperdicio de recursos.
En servicios en segundo plano o microservicios, las tareas que requieren una cantidad significativa de tiempo, como la generación de grandes lotes de PDF, se pueden gestionar de manera más eficiente utilizando CancellationToken. Cuando el servicio está a punto de cerrarse o reducirse, las tareas en progreso pueden cancelarse de manera limpia, asegurando que no se pierdan ni corrompan datos.
Ahora hemos llegado al final de la discusión de hoy sobre el uso de CancellationTokens con IronPDF, podrás implementarlos en tus proyectos de PDF como un profesional.! Uso de C# CancellationToken conIronPDFte permite crear aplicaciones más eficientes y receptivas que manejan las tareas de generación de PDF de manera elegante. Este enfoque permite un modelo de cancelación cooperativa, permitiendo a las tareas verificar solicitudes de cancelación en puntos seguros durante la ejecución, en lugar de ser terminadas abruptamente.
Ya sea que estés gestionando informes de larga duración, generación de PDFs a demanda en aplicaciones web o servicios en segundo plano, incorporar un CancellationToken, o múltiples tokens simultáneamente, garantiza que las tareas innecesarias puedan ser canceladas, previniendo el desperdicio de recursos y mejorando la experiencia del usuario.
Con solo unas pocas líneas de código, puedes mejorar la escalabilidad y la capacidad de respuesta de tu aplicación, al tiempo que le das a los usuarios más control sobre sus acciones. Si aún no has explorado IronPDF, ahora es el momento perfecto para probarlo.**Prueba gratuitay descubre cómo sus potentes capacidades de generación de PDF pueden transformar tus proyectos en C#.
9 productos API .NET para sus documentos de oficina