Cómo generar PDFs con Async y Multithreading
Async y threading son útiles a la hora de generarpDF de alto rendimiento en C# y VB.NET con IronPDF en lotes o para optimizar el rendimiento.
Cómo generar PDFs con Async y Multithreading
- Descargue IronPDF de NuGet para empezar con la generación de PDF asíncrona y multihilo
- Preparar los contenidos HTML que se van a convertir
- Utiliza el
RenderHtmlAsPdfAsync
método para convertir HTML a PDF de forma asíncrona con IronPDF - Explore el uso de
Parallel.ForEach
método de multihilo en el procesamiento de PDF - Revisar la comparación de rendimiento de diferentes técnicas de generación de PDF
Instalar con NuGet
Install-Package IronPdf
Descargar DLL
Instalar manualmente en su proyecto
Instalar con NuGet
Install-Package IronPdf
Descargar DLL
Instalar manualmente en su proyecto
Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.
Echa un vistazo IronPDF en Nuget para una instalación y despliegue rápidos. Con más de 8 millones de descargas, está transformando PDF con C#.
Install-Package IronPdf
Considere instalar el IronPDF DLL directamente. Descárguelo e instálelo manualmente para su proyecto o forma GAC: IronPdf.zip
Instalar manualmente en su proyecto
Descargar DLLEjemplo asíncrono
IronPDF soporta completamente Async usando sus métodos de renderizado Async 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);
Imports IronPdf
Imports System.Threading.Tasks
' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()
Private htmlStrings() As String = {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"}
' Create an array to store the tasks for rendering
Private renderingTasks = New Task(Of PdfDocument)(htmlStrings.Length - 1){}
For i As Integer = 0 To htmlStrings.Length - 1
Dim index As Integer = i ' Capturing the loop variable
renderingTasks(i) = Task.Run(Async Function()
' Render HTML to PDF
Return Await renderer.RenderHtmlAsPdfAsync(htmlStrings(index))
End Function)
Next i
' 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.
El patrón Parallel.ForEach
nos ha resultado muy útil para procesar PDFs por lotes.
: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);
}
});
Imports IronPdf
Imports System.Collections.Concurrent
Imports System.Collections.Generic
Imports System.Threading.Tasks
Private queue = New List(Of String)() From {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"}
' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()
' Create a list to store the rendered PDFs
Private pdfResults As New List(Of PdfDocument)()
Parallel.ForEach(queue, Sub(html)
' Render HTML to PDF
Dim pdf As PdfDocument = 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
SyncLock pdfResults
pdfResults.Add(pdf)
End SyncLock
End Sub)
Comparación de resultados
Hagamos una comparación. He añadido además un retardo de 5 segundos en la renderización con el botónClase WaitFor para simular el renderizado de HTML complejo. A continuación se muestra una tabla comparativa de los resultados obtenidos con las distintas técnicas descritas.
Renderizado normal | Renderización asíncrona | Renderizado multihilo |
---|---|---|
5.75 segundos | 5.59 segundos | 5.68 segundos |