AYUDA .NET

C# ConfigureAwait (Cómo funciona para desarrolladores)

Publicado en 24 de octubre, 2024
Compartir:

Como desarrollador, la programación asíncrona puede ser extremadamente beneficiosa, ya que puede mejorar el rendimiento, la eficiencia y la capacidad de respuesta de sus aplicaciones, en particular las que se ocupan de operaciones que pueden tardar una cantidad impredecible de tiempo en completarse. Utilizando `ConfigureAwait(falso), puede evitar bloqueos en determinados escenarios. Los bloqueos se producen en la programación asíncrona cuando existe un contexto de sincronización(como un hilo de interfaz de usuario en una aplicación de escritorio) que espera que se complete una operación antes de continuar. Aún así, la tarea esperada está esperando a que el contexto de sincronización esté disponible, creando una espera circular.

Hoy examinaremos cómoConfigureAwait puede utilizarse con IronPDF para realizar con eficacia tareas de procesamiento de PDF mediante programación asíncrona. IronPDF es una biblioteca PDF .NET que facilita el trabajo con tareas relacionadas con PDF. Con un sólido conjunto de funciones, una gran compatibilidad multiplataforma y una extensa documentación, se trata de una potente herramienta PDF que no puede faltar en su kit de herramientas para desarrolladores.

Comprender la programación asíncrona en C#;

¿Qué es la programación asíncrona?

La programación asíncrona se refiere a un método de escribir código que permite que ciertas operaciones se ejecuten independientemente del hilo principal de la aplicación. Esto es útil para tareas de larga duración que requieren espera, como las operaciones de E/S. Al permitir que estas tareas se ejecuten sin bloquear el hilo principal, la aplicación puede seguir ejecutándose mientras estas tareas tardan en completarse, lo que en última instancia mejora el rendimiento y la capacidad de respuesta de la aplicación.

El papel de ConfigureAwait en el código asíncrono

ConfigureAwait es un método de programación asíncrona utilizado para controlar cómo se ejecuta una continuación. La continuación es el código que se ejecuta después de una expresión await, por defecto **await** captura el contexto actual y trata de marshal la continuación de nuevo a ese contexto que puede ser ineficaz. ConfigureAwait permite especificar si la continuación debe ejecutarse en el contexto capturado, indicado como `ConfigureAwait(verdadero)**ConfigureAwait(falso)**`.

Uso de **ConfigureAwait(falso)**` ayuda a evitar bloqueos, esto se debe a que cuando se utiliza, se le está diciendo a la tarea que no capture el contexto de sincronización actual y que no intente reanudar en el contexto original. Esto permite que la continuación se ejecute en un subproceso del grupo de subprocesos en lugar del contexto original, evitando así que el subproceso principal se bloquee.

\ConfigureAwait(falso)**\Es especialmente útil en el código de bibliotecas o en casos en los que no es necesario reanudar el contexto original, lo que garantiza que el código siga siendo flexible y libre de bloqueos.

Cómo utilizar ConfigureAwait con IronPDF

Configuración de IronPDF en su proyecto .NET

Para empezar a utilizar IronPDF en sus proyectos .NET, instale la aplicaciónPaquete NuGet IronPDF. Para ello, vaya a herramientas > NuGet Package Manager > NuGet Package Manager for Solution y busque IronPDF:

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 1

También puede ejecutar el siguiente comando en la consola del gestor de paquetes:

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

Para empezar a utilizar IronPDF en su código, asegúrese de que ha colocado la declaración "using IronPdf" en la parte superior de su archivo de código. Para obtener una guía más detallada sobre la configuración de IronPDF en su entorno, consulte su sitio webcómo empezar página.

Generación asíncrona de archivos PDF con IronPDF

Generar archivos PDF de forma asíncrona puede ser especialmente beneficioso en situaciones en las que se necesita generar grandes cantidades de archivos PDF o se desea realizar varias operaciones simultáneamente. Con IronPDF, puede realizar tareas relacionadas con PDF de forma asíncrona, lo que podría parecerse al siguiente código asíncrono:

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
VB   C#

En este código, hemos creado un documento PDF de forma asíncrona en el comando GeneratePdfAsync() método. ChromePdfRenderer se utiliza para crear el renderizador que es vital para crear un archivo PDF a partir del contenido HTML. EnDocumentoPdf se utiliza para crear un PDF a partir de la claseCadena HTMLsin embargo, también se podría utilizar para crear el PDF a partir de unArchivo HTML, URL, imageny mucho más. Para obtener más información sobre los distintos métodos de generación de un PDF con IronPDF, consulte la páginasección how-to sobre la generación de PDF.

Trabajar con archivos PDF de gran tamaño de forma asíncrona

Cuando se trabaja con archivos PDF de gran tamaño, el uso de métodos asíncronos con `ConfigureAwait(falso)` puede mejorar significativamente el rendimiento liberando el hilo principal durante operaciones largas. Para este ejemplo, he tomado un documento PDF de gran tamaño y he realizado unaextracción de texto tarea de demostrar lo beneficioso que es el procesamiento asíncrono de PDF.

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
VB   C#

En el código anterior, *ConfigureAwait(falso)se utiliza *` durante la larga tarea de extraer todo el texto de un archivo PDF de gran tamaño, que en nuestro caso tenía más de 200 páginas.

  • Importación y configuración: La primera sección en la parte superior de nuestro código está dedicada a la importación de las bibliotecas y espacios de nombres necesarios. Para poder utilizar la biblioteca IronPDF, debe asegurarse de que dispone de `using IronPdf`
  • Clase y método principal: La clase Programa define la clase que contiene el código principal de la aplicación para este proyecto. \Tarea principal asíncrona estática(cadena[] args)` es el punto de entrada de la aplicación. Aquí, lo hemos marcado como async para que nuestras operaciones asíncronas puedan ejecutarse desde él. A continuación, utilizamos await LongPdfTask()** para llamar al método LongPdfTask de forma asíncrona.
  • Bloque try: He envuelto el código dentro del método LongPdfTask en un bloque try-catch para manejar con gracia cualquier excepción inesperada.

    • **PDF = await Task.Run(() => PdfDocument.FromFile("Ejemplo.pdf"))configureAwait(falso)esta línea puede dividirse en tres segmentos diferentes:

      • PDFDocument.FromFile("Ejemplo.pdf"): Esta sección carga de forma sincrónica el archivo PDF especificado en unIronPdf.PdfDocument objeto.

      • **Espera Tarea.Ejecutar(() => ...)ejecuta la operación de carga de PDF en un subproceso independiente para evitar el bloqueo del subproceso principal. Esto hace que sea una operación asíncrona.
  • ConfigureAwait(falso): Evita capturar el contexto actual, lo que debería mejorar el rendimiento y reducir los bloqueos.
  • string text = await Tarea.Ejecutar(() => pdf.ExtraerTodoTexto())configureAwait(falso): Se ejecuta elExtracción de texto de IronPDF método,ExtraerTodoTexto(). De nuevo, esperar a Task.Run(() => ...) se utiliza para ejecutar esta operación de forma asíncrona en un subproceso independiente.
  • Espera Tarea.Ejecutar(() => Archivo.WriteAllText("extractedText.txt", texto))configureAwait(falso): Con esto, estamos escribiendo el texto extraído a un archivo .txt de forma asíncrona utilizando el método await Task una vez más.

Antes de

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 2

Salida

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 3

Prácticas recomendadas para el uso de ConfigureAwait en aplicaciones .NET

Cuándo utilizar ConfigureAwait(verdadero) frente a ConfigureAwait(falso)

ConfigureAwait(falso) se utiliza mejor cuando se trabaja en código de biblioteca o procesamiento en segundo plano, donde no es necesario preservar el contexto de sincronización. Normalmente, se trata de código de servidor en el que el rendimiento es fundamental. Uso de ConfigureAwait(falso) significa que cuando se realiza la operación await, la continuación no se ejecuta necesariamente en el mismo hilo que inició la operación asíncrona.

Cuando se trata del procesamiento de PDF, la implementación de ConfigureAwait(falso) puede ayudar a maximizar el rendimiento cuando se ejecutan múltiples tareas de procesamiento de PDF para ayudar a evitar cuellos de botella en relación con el cambio de contexto. También puede ayudar a mantener el buen funcionamiento de la aplicación cuando se procesan grandes cantidades de archivos PDF, y simplemente ayudar a mantener la eficiencia en situaciones en las que se trabaja en aplicaciones de consola o servicios en segundo plano, donde el cambio de contexto podría ser innecesario.

ConfigureAwait(verdadero) se utiliza mejor en UI, en cualquier prueba unitaria para su código, o en aplicaciones ASP.NET donde la continuación debe ejecutarse en el mismo contexto, aunque si se utiliza mal puede llevar a un punto muerto. Por ejemplo, si estuviera actualizando la interfaz de usuario o accediendo a httpcontext). ConfigureAwait(verdadero) es el comportamiento por defecto, y también podría escribirse simplemente ConfigureAwait.

Cuando se utiliza con tareas de procesamiento de PDF, puede ser especialmente beneficioso en situaciones como si el código de procesamiento de PDF está estrechamente integrado con la interfaz de usuario(al utilizar aplicaciones de interfaz de usuario como WPF, WinForms, etc)para ello, es necesario capturar el contexto de sincronización para garantizar que estas actualizaciones se produzcan en el subproceso de la interfaz de usuario. También es beneficioso cuando se trabaja con operaciones sensibles a hilos, que deben ejecutarse en un hilo específico debido a requisitos de afinidad de hilos.

Manejo de excepciones en operaciones IronPDF asíncronas

El manejo de excepciones en la programación asíncrona es un aspecto importante a tener en cuenta, y requiere una cuidadosa consideración, ya que las excepciones no manejadas pueden terminar la aplicación. El uso de bloques try-catch en el código asíncrono es una buena forma de manejar con elegancia cualquier excepción inesperada.

Por ejemplo:

public async Task SafeGeneratePdfAsync()
{
    try
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);
        await Task.Run(() => pdf.SaveAs("output.pdf")).ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"An error occurred: {ex.Message}");
    }
}
public async Task SafeGeneratePdfAsync()
{
    try
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);
        await Task.Run(() => pdf.SaveAs("output.pdf")).ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"An error occurred: {ex.Message}");
    }
}
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
VB   C#

Al utilizar tareas de continuación con `ConfigureAwait(falso)\Las excepciones pueden ser manejadas usando try-catch dentro de la continuación, o por la propiedad Task.Exception si se usa Task.ContinueWith.

Un ejemplo de cómo se podría escribir el código para hacer esto podría ser el siguiente:

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
VB   C#

¿Por qué elegir IronPDF para sus necesidades de procesamiento de PDF?

Principales características y ventajas de IronPDF

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 4

IronPDF es una potente biblioteca PDF en C# que ofrece un amplio conjunto de funciones para todas las tareas relacionadas con PDF. Con compatibilidad total con .NET 8, 7, 6, .NET Core, Standard y Framework, y capaz de ejecutarse en diversos entornos de aplicaciones como Windows, Linux, Mac, Docker, Azure y AWS, podrá sacar el máximo partido de IronPDF sea cual sea su entorno preferido.

Con IronPDF, puede generar archivos PDF a partir de varios tipos de archivos y datos, incluidos los siguientesArchivos HTML, Cadena HTML, URL, imágenes, DOCXyRTFa menudo en unas pocas líneas de código! Puede encargarse del formato de los documentos PDF, aplicarmarcas de agua personalizadas, fusionar y dividir PDF, manejarCodificación PDF yseguridady mucho más.

Compatibilidad de IronPDF con la programación asíncrona

IronPDF proporciona métodos asíncronos para muchas de sus operaciones, lo que permite a los desarrolladores aprovechar los patrones async/await sin problemas. Esta compatibilidad garantiza que IronPDF pueda integrarse en aplicaciones de rendimiento crítico sin sacrificar la capacidad de respuesta, lo que la convierte en una herramienta PDF inestimable para los desarrolladores que trabajan en tareas relacionadas con PDF en un entorno asíncrono.

Licencias

Si desea probar IronPDF por sí mismo y explorar su amplia gama de funciones, puede hacerlo fácilmente gracias a susprueba gratuita período. Con su rápida y sencilla instalación, podrás tener IronPDF funcionando en tus proyectos PDF en muy poco tiempo. ¿Quiere seguir utilizándolo y aprovechar sus potentes funciones para subir de nivel en sus proyectos PDF? Licencias los precios comienzan en 749 $ e incluyen una generosa garantía de devolución del dinero de 30 días, un año entero de soporte y actualizaciones del producto y una licencia perpetua(Sin molestas cuotas periódicas!)

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 5

Ejemplo: Uso de ConfigureAwait e IronPDF para la generación de PDF

Para generar un PDF de forma asíncrona, utilizaremos IronPDF para ejecutar el código de renderización del archivo HTML y guardar el resultado, mientras utilizamos ConfigureAwait(falso) para garantizar que la continuación no cambie innecesariamente al contexto de sincronización 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
VB   C#

En este ejemplo, estamos utilizando el método async que creamos, static async TaskCrearFacturaPdfAsync(), para generar una factura en PDF a partir del archivo HTML proporcionado por elRenderHtmlFileAsPdfAsync método. Hemos utilizado ConfigureAwait(falso) para evitar la continuación de esta tarea en el contexto de sincronización original, mejorando el rendimiento de nuestra aplicación no UI.

También hemos implementado la función await Task.Run()) => ...) método de nuevo para ejecutar las operaciones de forma asíncrona. Por último, hemos guardado el archivo PDF recién generado como "invoice.pdf" utilizando el método pdf.SaveAs. Todo el código dentro de *CreateInvoicePdfAsync()el método * ha sido envuelto dentro de un bloque try-catch para manejar cualquier excepción inesperada.

Archivo HTML

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 6

Salida

C# ConfigureAwait(Cómo funciona para desarrolladores): Figura 7

Como puede ver, generamos con éxito el archivo HTML en un PDF de forma asíncrona, y nos creó un archivo PDF claro y de alta calidad.

Conclusión

La programación asíncrona es esencial para crear aplicaciones .NET eficaces y con capacidad de respuesta y para utilizarConfigureAwait correctamente puede ayudarle a conseguir un rendimiento óptimo, especialmente al escribir código a nivel de aplicación. Al trabajar conIronPDFaprovechando los métodos asíncronos junto con ConfigureAwait(falso) garantiza que las tareas de procesamiento de PDF no bloqueen el subproceso principal, lo que mejora la capacidad de respuesta general de la aplicación. Al comprender cuándo y cómo utilizar ConfigureAwait, puede hacer que sus tareas de procesamiento de PDF de IronPDF sean más sólidas y de mayor rendimiento.

Ahora puede avanzar como un profesional en la utilización de ConfigureAwait junto con IronPDF en la programación asíncrona, así que ¿a qué espera? Pruebe IronPDF hoy mismo para ver cómo puede mejorar sus proyectos relacionados con PDF! Si desea obtener más información sobre la amplia gama de funciones que IronPDF puede ofrecer como potente código de biblioteca de uso general, no deje de consultar su práctico manualguías prácticas. O, si desea obtener más información sobre el uso de IronPDF junto con métodos de programación asíncrona, o simplemente desea obtener más información sobre IronPDF en general, consulte nuestra página webentradas de blog. Si busca más ejemplos de generación asíncrona de PDF, consulte nuestra secciónC# Espere unos segundos o nuestro otro post sobreC# Task.Run.

< ANTERIOR
Azure Tables (Cómo funciona para desarrolladores)
SIGUIENTE >
Tipos nulos en C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >