Cómo generar PDFs con Async y Multithreading
Async y threading son útiles al generar PDFs de alto rendimiento en C# y VB.NET con IronPDF en lotes o para un rendimiento optimizado.
Comience con IronPDF
Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.
Cómo generar PDFs con Async y Multithreading
- Descargue IronPDF desde NuGet para comenzar con la generación de PDF asincrónica y de subprocesos múltiples
- Preparar los contenidos HTML que se van a convertir
- Utiliza el método
RenderHtmlAsPdfAsync
para convertir HTML a PDF de forma asíncrona con IronPDF - Explore el uso del método
Parallel.ForEach
para multithreading en el procesamiento de PDF - Revisar la comparación de rendimiento de diferentes técnicas de generación de PDF
Ejemplo asíncrono
IronPDF admite completamente Async usando sus métodos de Renderización Asíncrona, como el método RenderHtmlAsPdfAsync
.
:path=/static-assets/pdf/content-code-examples/how-to/async-async.cs
using IronPdf;
using System.Threading.Tasks;
// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
string[] htmlStrings = {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"};
// Create an array to store the tasks for rendering
var renderingTasks = new Task<PdfDocument>[htmlStrings.Length];
for (int i = 0; i < htmlStrings.Length; i++)
{
int index = i; // Capturing the loop variable
renderingTasks[i] = Task.Run(async () =>
{
// Render HTML to PDF
return await renderer.RenderHtmlAsPdfAsync(htmlStrings[index]);
});
}
// Wait for all rendering tasks to complete
// await Task.WhenAll(renderingTasks);
Ejemplo de multihilo
IronPDF es thread-safe y soporta multithreading cuando se utiliza el motor de renderizado IronPdf.ChromePdfRenderer.
Una limitación es que el multithreading está limitado en máquinas macOS.
Hemos encontrado el patrón Parallel.ForEach
muy útil para el procesamiento por lotes de PDFs.
:path=/static-assets/pdf/content-code-examples/how-to/async-multi-thread.cs
using IronPdf;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
var queue = new List<string>() { "<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>" };
// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Create a list to store the rendered PDFs
List<PdfDocument> pdfResults = new List<PdfDocument>();
Parallel.ForEach(queue, html =>
{
// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// You may choose to save the PDF to disk here if needed
// For this example, we'll store it in the pdfResults list
lock (pdfResults)
{
pdfResults.Add(pdf);
}
});
Comparación de resultados
Hagamos una comparación. Además, he añadido un retraso de 5 segundos en la renderización con la clase WaitFor para simular la renderización de HTML complejo. A continuación se muestra una tabla comparativa de los resultados obtenidos con las distintas técnicas descritas.
Renderizado Normal