C# ConfigureAwait (Jak to dziala dla programistow)
Jako programista, programowanie asynchroniczne może być bardzo korzystne, poniewaz może poprawić wydajność, efektywność oraz responsywność aplikacji, szczegółnie tych zajmujacych sie operacjami, ktorych czas zakonczenia jest nieprzewidywalny. Używając ConfigureAwait(false), można uniknąć zakleszczeń w określonych scenariuszach. Do zakleszczen dochodzi w programowaniu asynchronicznym, kiedy istnieje kontekst synchronizacji (taki jak wątkiem UI w aplikacji desktopowej), ktory oczekuje na zakonczenie operacji przed kontynuacja. Jednakze, oczekiwane zadanie czeka na udostepnienie kontekstu synchronizacji, co tworzy cykliczne oczekiwanie.
Dzis zbadamy, jak ConfigureAwait może być uzyte z IronPDF do efektywnego wykonywania zadań przetwarzania PDF przy użyciu programowania asynchronicznego. IronPDF to biblioteka .NET PDF, która sprawia, ze praca z zadaniami związanymi z PDF jest przyjemna. Dzieki roznym funkcjom, mocnej kompatybilnosci miedzyplatformowej i szerokiej dokumentacji, jest to potezne narzedzie PDF do posiadania w zestawie narzedzi programisty.
Understanding Asynchronous Programming in C
Czym jest programowanie asynchroniczne?
Programowanie asynchroniczne odnosi sie do metody pisania kodu, która pozwala na wykonywanie pewnych operacji niezależnie od głównego watku aplikacji. Jest to przydatne dla dlugo trwajacych zadań wymagajacych oczekiwania, takich jak operacje wejscia/wyjscia. Pozwalajac na wykonywanie tych zadań bez blokowania głównego watku, aplikacja może dalej działać, podczas gdy te zadania trwaja, co ostatecznie poprawia wydajność oraz responsywność aplikacji.
Rola ConfigureAwait w kodzie asynchronicznym
ConfigureAwait jest metoda w programowaniu asynchronicznym używana do kontroli sposobu wykonywania kontynuacji. Kontynuacja to kod, który działa po wyrażeniu await, domyślnie await przechwytuje bieżący kontekst i próbuje skierować kontynuację z powrotem do tego kontekstu, co może być nieskuteczne. ConfigureAwait pozwala określić, czy kontynuacja powinna być wykonywana w przechwyconym kontekście, oznaczonym jako ConfigureAwait(true), czy nie, oznaczonym jako ConfigureAwait(false).
Używanie ConfigureAwait(false) pomaga unikać zakleszczeń, ponieważ kiedy go używasz, instruujesz zadanie, aby nie przechwytywało bieżącego kontekstu synchronizacji i nie próbowało wznowić w pierwotnym kontekście. To pozwala kontynuacji uruchomic sie na watku puli wątków zamiast oryginalnego kontekstu, dzięki czemu główny wątek nie zostaje zablokowany.
ConfigureAwait(false) jest szczególnie przydatne w kodzie biblioteki lub w przypadkach, gdzie wznawianie pierwotnego kontekstu nie jest konieczne, zapewniając tym samym, że kod pozostaje elastyczny i wolny od zakleszczeń.
Jak korzystać z ConfigureAwait w IronPDF
Konfiguracja IronPDF w projekcie .NET
Aby zaczac korzystać z IronPDF w projektach .NET, zacznij od zainstalowania IronPDF NuGet package. Możesz to zrobic przechodzac do Tools > NuGet Package Manager > NuGet Package Manager for Solution i wyszukujac IronPDF:

Alternatywnie, uruchom następujące polecenie w konsoli Package Manager Console:
Install-Package IronPdf
Aby rozpocząć używanie IronPDF w swoim kodzie, upewnij się, że umieściłeś instrukcję using IronPdf; na początku pliku kodu. Aby uzyskać bardziej szczegółowy przewodnik dotyczący konfigurowania IronPDF w swoim środowisku, zajrzyj na jego stronę startową.
Generowanie PDF asynchronicznie za pomoca IronPDF
Generowanie plików PDF asynchronicznie może być szczegółnie korzystne w sytuacjach, gdy trzeba generować duze ilosci plików PDF lub chcesz wykonywać wiele operacji jednoczesnie. Za pomoca IronPDF możesz wykonywać zadania związane z PDF asynchronicznie, co może wyglądac jak poniższy kod asynchroniczny:
using IronPdf;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
await GeneratePdfAsync();
}
static async Task GeneratePdfAsync()
{
// Create a new instance of ChromePdfRenderer.
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Example HTML content to be converted into a PDF.
string htmlContent = "<h1>Hello World!</h1>";
// Asynchronously render the HTML content as a PDF document.
PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
// Asynchronously save the PDF document to a file.
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()
{
// Create a new instance of ChromePdfRenderer.
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Example HTML content to be converted into a PDF.
string htmlContent = "<h1>Hello World!</h1>";
// Asynchronously render the HTML content as a PDF document.
PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
// Asynchronously save the PDF document to a file.
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
' Create a new instance of ChromePdfRenderer.
Dim renderer As New ChromePdfRenderer()
' Example HTML content to be converted into a PDF.
Dim htmlContent As String = "<h1>Hello World!</h1>"
' Asynchronously render the HTML content as a PDF document.
Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync(htmlContent)
' Asynchronously save the PDF document to a file.
Await Task.Run(Function() pdf.SaveAs("outputAsync.pdf"))
Console.WriteLine("Working!")
End Function
End Class
W tym kodzie stworzyliśmy dokument PDF asynchronicznie w metodzie GeneratePdfAsync(). ChromePdfRenderer jest używany do stworzenia renderera niezbędnego do tworzenia pliku PDF z treści HTML. Klasa PdfDocument jest używana do tworzenia PDF z dostarczonego napisu HTML, jednakze możesz tez uzyc jej do stworzenia PDF z pliku HTML, URL, obrazka i innych. Aby dowiedziec sie więcej o różnych metodach generowania PDF za pomoca IronPDF, odwiedz sekcje how-to dotycząca generowania PDF.
Praca z duzymi plikami PDF asynchronicznie
Gdy mamy do czynienia z dużymi plikami PDF, użycie metod asynchronicznych z ConfigureAwait(false) może znacznie poprawić wydajność, zwalniając główny wątek podczas długotrwałych operacji. W tym przykładzie wzialem duzy dokument PDF i przeprowadzilem ekstrakcje tekstu by zademonstrowac, jak korzystne może być asynchroniczne przetwarzanie 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 asynchronously.
PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false);
// Extract text from PDF asynchronously with ConfigureAwait to prevent context capture.
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 LongPdfTask: {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 asynchronously.
PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false);
// Extract text from PDF asynchronously with ConfigureAwait to prevent context capture.
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 LongPdfTask: {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 asynchronously.
Dim pdf As PdfDocument = Await Task.Run(Function() PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(False)
' Extract text from PDF asynchronously with ConfigureAwait to prevent context capture.
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 LongPdfTask: {ex.Message}")
End Try
End Function
End Class
W powyższym kodzie użyto ConfigureAwait(false) podczas dużego, czasochłonnego zadania polegającego na wyodrębnieniu całego tekstu z dużego pliku PDF, który w naszym przypadku miał ponad 200 stron.
- Import i ustawienia: Pierwsza sekcja na gorze naszego kodu poświęcona jest importowi niezbędnych bibliotek i przestrzeni nazw. Musisz upewnić się, że masz
using IronPdf;, aby używać biblioteki IronPDF. - Klasa i Metoda Główna:
class Programdefiniuje klasę, która zawiera główny kod aplikacji dla tego projektu.static async Task Main(string[] args)jest punktem wejściowym dla aplikacji. Tutaj zaznaczylismy go jako async, aby nasze operacje asynchroniczne mogly sie z niego uruchamiac. Następnie używamy await LongPdfTask(), aby wywoływać metode LongPdfTask asynchronicznie. -
Blok try: Owinelismy kod w metodzie LongPdfTask w blok try-catch w celu eleganckiego obsługiwania wszystkich niespodziewanych wyjątków.
-
PdfDocument PDF = await Task.Run(() => PdfDocument.FromFile("Sample.pdf")).ConfigureAwait(false): Ta linia może być rozlozona na trzy różne segmenty:
- PdfDocument.FromFile("Sample.pdf"): Ta część synchronizuje ładowanie okreslonego pliku PDF do obiektu IronPdf.PdfDocument.
- await Task.Run(() => ...): Uruchamia operacje ladowania PDF na oddzielnym watku, aby uniknąć blokowania głównego watku. To czyni go operacja asynchroniczna.
- .ConfigureAwait(false): Unika przechwytywania biezacego kontekstu, co powinno poprawić wydajność i zredukowac zakleszczenia.
-
- string text = await Task.Run(() => pdf.ExtractAllText()).ConfigureAwait(false): To uruchamia metode ekstrakcji tekstu IronPDF, ExtractAllText(). Jeszcze raz, await Task.Run(() => ...) jest używane do uruchomienia operacji asynchronicznie na oddzielnym watku.
- await Task.Run(() => File.WriteAllText("extractedText.txt", text)).ConfigureAwait(false): Tym, zapisujemy wydobyty tekst do pliku .txt asynchronicznie, używając metody await Task jeszcze raz.
Przed

Wynik

Najlepsze praktyki dotyczące użycia ConfigureAwait w aplikacjach .NET
Kiedy używać ConfigureAwait(true) vs. ConfigureAwait(false)
ConfigureAwait(false) najlepiej używać, gdy pracujesz w kodzie biblioteki lub przetwarzaniu w tle, gdzie kontekst synchronizacji nie musi być zachowany. Zazwyczaj to dotyczy kodu po stronie serwera, gdzie wydajność jest kluczowa. Uzycie ConfigureAwait(false) oznacza, ze gdy operacja await sie konczy, kontynuacja niekoniecznie musi działać na tym samym watku, ktory rozpoczal operacje asynchroniczna.
Jeśli chodzi o przetwarzanie PDF, wdrożenie ConfigureAwait(false) może pomoc w maksymalizacji wydajności podczas uruchamiania wielu zadań przetwarzania PDF w celu unikniecia waskich gardeł związanych z przełączaniem kontekstu. Może również pomoc w plynnej pracy aplikacji podczas przetwarzania duzej ilosci plików PDF oraz utrzymywaniu efektywności w sytuacjach, w ktorych pracujesz w aplikacjach konsolowych lub w usługach wsadowych, gdzie przełączanie kontekstu mogłoby być niepotrzebne.
ConfigureAwait(true) najlepiej używać w interfejsie użytkownika, testach jednostkowych dla Twojego kodu, lub aplikacjach ASP.NET, gdzie kontynuacja musi działać w tym samym kontekście, choc nieprawidlowa jego użycie może prowadzic do zakleszczen. Na przykład, gdy aktualizujesz interfejs użytkownika lub dostep do httpcontext). ConfigureAwait(true) jest domyslnym zachowaniem i można go również zapisać jako po prostu ConfigureAwait.
Gdy używany jest w zadaniach przetwarzania PDF, może być szczegółnie korzystny w sytuacjach, takich jak gdy kod przetwarzania PDF jest ścisle zintegrowany z UI (podczas korzystania z aplikacji UI, takich jak WPF, WinForms, itp.), takich jak wyswietlanie postępu, i musisz przechwycic kontekst synchronizacji, aby zapewnic, ze te aktualizacje odbywaja sie na watku UI. Jest również korzystny podczas pracy z operacjami wymagającymi specyficznego watku ze względu na wymagania związane z przywiâzaniami wątku.
Obsluga wyjątków w operacjach asynchronicznych IronPDF
Obsluga wyjątków w programowaniu asynchronicznym to ważny aspekt, który należy mieć na uwadze, i wymaga starannego rozwazenia, a nieobsługiwane wyjątki mogą zakonczyc działanie aplikacji. Korzystanie z blokow try-catch wokół kodu asynchronicznego jest świetnym sposobem na eleganckie radzenie sobie z niespodziewanymi wyjątkami.
Na przykład:
public async Task SafeGeneratePdfAsync()
{
try
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Asynchronously render HTML as PDF and do not capture the context
PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);
// Asynchronously save PDF to file
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();
// Asynchronously render HTML as PDF and do not capture the context
PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(false);
// Asynchronously save PDF to file
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()
' Asynchronously render HTML as PDF and do not capture the context
Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync("<h1>Error Handling</h1>").ConfigureAwait(False)
' Asynchronously save PDF to file
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
Kiedy używasz zadań kontynuacyjnych z ConfigureAwait(false), wyjątki można obsługiwać za pomocą try-catch w ramach kontynuacji, lub przez właściwość Task.Exception jeśli używasz Task.ContinueWith.
Przyklad, jak moglbys zapisać kod, aby to zrobic, moglby wyglądac tak:
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
End Class
Dlaczego warto wybrac IronPDF dla potrzeb przetwarzania PDF?
Kluczowe funkcje i zalety IronPDF

IronPDF to potężna biblioteka C# PDF, która oferuje bogaty zestaw funkcji do wszystkich zadań związanych z PDF. Z pełna obsługa .NET 8, 7, 6, .NET Core, Standard i Framework, i zdolnoscia działania w szerokim zakresie srodowisk aplikacji, takich jak Windows, Linux, Mac, Docker, Azure i AWS, będziezs w stanie wyciagnac maksa z IronPDF bez wzgledu na preferowane środowisko.
Za pomoca IronPDF możesz generować PDF z różnych typow plików i danych; w tym plików HTML, napisow HTML, URL, obrazkow, DOCX i RTF, często w zaledwie kilku linijkach kodu! Może zajmowac sie formatowaniem dokumentów PDF, nakladac indywidualne znaki wodne, scałac i dzielic PDF, zajmowac sie szyfrowaniem PDF i zabezpieczeniami i wiele więcej.
Obsluga programowania asynchronicznego przez IronPDF
IronPDF udostepnia asynchroniczne metody dla wielu swoich operacji, pozwalając programistom bezproblemowo wykorzystywac wzorce async/await. Ta obsługa zapewnia, ze IronPDF może być zintegrowany z aplikacjami krytycznymi dla wydajności bez pogarszania reagowalnosci, czyniac go nieocenionym narzędziem PDF dla deweloperow pracujacych nad zadaniami związanymi z PDF w środowisku asynchronicznym.
Licencjonowanie
Jeśli chcesz wypróbować IronPDF samodzielnie i zbadac szeroki zakres jego funkcji, możesz to łatwo zrobic dzięki darmowy okres próbny. Dzięki szybkiemu i łatwemu procesu instalacji, będziesz w stanie uruchomic IronPDF w projektach PDF w krotkim czasie. Chcesz kontynuowac korzystanie z jego potężnych funkcji, aby podniesc poziom w swoich projektach PDF? Licencje zaczynają się od zaledwie $999, i obejmują hojną 30-dniową gwarancję zwrotu pieniędzy, pełny rok wsparcia produktu i aktualizacji, a także są wydawane jako licencja wieczysta (bez uciążliwych opłat cyklicznych!)

Przyklad: Uzycie ConfigureAwait i IronPDF do generowania PDF
Aby generować PDF asynchronicznie, uzyjemy IronPDF do wykonania kodu renderującego plik HTML i zapisania wyniku, używając ConfigureAwait(false), aby upewnic sie, ze kontynuacja nie przelacza sie niepotrzebnie z powrotem do oryginalnego kontekstu synchronizacji.
using IronPdf;
using System.Threading.Tasks;
using System;
class Program
{
public static async Task Main(string[] args)
{
await CreateInvoicePdfAsync();
}
static async Task<string> CreateInvoicePdfAsync()
{
// Instance of ChromePdfRenderer to convert HTML to PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
try
{
// Render HTML file as a PDF asynchronously without capturing the context.
var pdf = await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(false);
// Save the generated PDF asynchronously.
await Task.Run(() => pdf.SaveAs("invoice.pdf")).ConfigureAwait(false);
return "invoice.pdf";
}
catch (Exception ex)
{
Console.WriteLine($"Error generating PDF: {ex.Message}");
return null;
}
}
}
using IronPdf;
using System.Threading.Tasks;
using System;
class Program
{
public static async Task Main(string[] args)
{
await CreateInvoicePdfAsync();
}
static async Task<string> CreateInvoicePdfAsync()
{
// Instance of ChromePdfRenderer to convert HTML to PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
try
{
// Render HTML file as a PDF asynchronously without capturing the context.
var pdf = await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(false);
// Save the generated PDF asynchronously.
await Task.Run(() => pdf.SaveAs("invoice.pdf")).ConfigureAwait(false);
return "invoice.pdf";
}
catch (Exception ex)
{
Console.WriteLine($"Error generating PDF: {ex.Message}");
return null;
}
}
}
Imports IronPdf
Imports System.Threading.Tasks
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)
' Instance of ChromePdfRenderer to convert HTML to PDF
Dim renderer As New ChromePdfRenderer()
Try
' Render HTML file as a PDF asynchronously without capturing the context.
Dim pdf = Await renderer.RenderHtmlFileAsPdfAsync("example.html").ConfigureAwait(False)
' Save the generated PDF asynchronously.
Await Task.Run(Function() pdf.SaveAs("invoice.pdf")).ConfigureAwait(False)
Return "invoice.pdf"
Catch ex As Exception
Console.WriteLine($"Error generating PDF: {ex.Message}")
Return Nothing
End Try
End Function
End Class
W tym przykładzie używamy metody async, która stworzyliśmy, static async Task
Zimplementowalismy również metode await Task.Run()) => ...) po raz kolejny, aby uruchomic operacje asynchronicznie. Na koniec zapisaliśmy nowo wygenerowany plik PDF jako "invoice.pdf" używając metody pdf.SaveAs. Caly kod w metodzie CreateInvoicePdfAsync() zostal umieszczony w blok try-catch, aby radzic sobie z wszelkimi niespodziewanymi wyjątkami.
Plik HTML

Wynik

Jak widać, pomyślnie wygenerowaliśmy plik HTML do PDF asynchronicznie, i stworzylismy wyraźny, wysokiej jakości plik PDF dla nas.
Wnioski
Programowanie asynchroniczne jest niezbędne do budowy responsywnych i wydajnych aplikacji .NET, a poprawne użycie ConfigureAwait może pomoc w osiagnieciu optymalnej wydajności, szczegółnie podczas pisania kodu aplikacyjnego. Pracując z IronPDF, użycie metod asynchronicznych wraz z ConfigureAwait(false) zapewnia, że zadania przetwarzania PDF nie blokują głównego wątku, poprawiając ogólną reaktywność aplikacji. Rozumiejąc, kiedy i jak używać ConfigureAwait, możesz sprawic, ze twoje zadania przetwarzania PDF w IronPDF będą bardziej solidne i wydajne.
Teraz możesz isc naprzod jako profesjonalisci w używaniu ConfigureAwait z IronPDF w programowaniu asynchronicznym, wiec na co czekasz? Wyprobuj IronPDF dzisiaj, aby zobaczyć, jak może poprawić twoje projekty związane z PDF! Jeśli chcesz dowiedziec sie więcej o szerokim zakresie funkcji, jakie oferuje IronPDF jako potężny uniwersalny kod biblioteczny, koniecznie sprawdz jego przydatne poradniki. Albo, jeśli chcesz dowiedziec sie więcej o używaniu IronPDF z metodami programowania asynchronicznego, albo po prostu chcesz dowiedziec sie więcej o IronPDF ogolnie, sprawdz nasze posty na blogu. Jeśli szukasz więcej przykładów asynchronicznego generowania PDF, sprawdz nasz wpis C# Wait For Seconds, albo nasz inny o C# Task.Run.
Często Zadawane Pytania
Co to jest ConfigureAwait w programowaniu asynchronicznym?
ConfigureAwait to metoda używana w programowaniu asynchronicznym do określania, czy kontynuacja po wyrażeniu await powinna zostać wykonana w oryginalnym kontekście synchronizacji, czy w innym. Użycie ConfigureAwait(false) może pomóc w uniknięciu zablokowań poprzez nieprzechwytywanie kontekstu synchronizacji.
Jak mogę generować pliki PDF asynchronicznie w C#?
Możesz generować pliki PDF asynchronicznie w C# za pomocą asynchronicznych metod IronPDF. To poprawia efektywność i responsywność, szczególnie przy obsłudze dużych plików, nie blokując głównego wątku aplikacji.
Dlaczego powinienem stosować ConfigureAwait(false) w moich aplikacjach C#?
Użycie ConfigureAwait(false) w aplikacjach C# pomaga poprawić wydajność, pozwalając na kontynuacje w wątku z puli wątków, unikając niepotrzebnego przełączania kontekstu i potencjalnych zablokowań, szczególnie w kodzie biblioteki.
Jakie są zalety używania IronPDF do przetwarzania PDF w .NET?
IronPDF oferuje rozbudowane funkcje takie jak generowanie PDF, ekstrakcja tekstu i scałanie, wraz ze znakomitą wielopłatformową kompatybilnością. Obsługuje programowanie asynchroniczne, co czyni go odpowiednim dla aplikacji wymagających wysokiej wydajności.
Jak mogę obsługiwać wyjątki w zadaniach asynchronicznego przetwarzania PDF?
Wyjątki w zadaniach asynchronicznego przetwarzania PDF można obsługiwać za pomocą bloków try-catch wokół metod async. IronPDF pozwala łagodnie obsługiwać wyjątki, zapewniając stabilność aplikacji.
W jaki sposób metody asynchroniczne poprawiają przetwarzanie PDF za pomocą IronPDF?
Metody asynchroniczne w IronPDF pozwalają wykonywać zadania przetwarzania PDF bez blokowania głównego wątku aplikacji. Prowadzi to do poprawy responsywności i efektywności aplikacji, szczególnie w przypadku dużych lub złożonych operacji PDF.
Jakie są kluczowe aspekty użycia ConfigureAwait w kodzie biblioteki?
Kiedy używasz ConfigureAwait w kodzie biblioteki, ważne jest użycie ConfigureAwait(false) w celu uniknięcia przechwytywania kontekstu synchronizacji, co poprawia wydajność i zapobiega zablokowaniom w operacjach asynchronicznych.
Jak skonfigurować IronPDF w projekcie C#?
Aby skonfigurować IronPDF w projekcie C#, możesz użyć Menedżera pakietów NuGet, wyszukując IronPDF lub uruchomić komendę Install-Package IronPdf w konsoli Menedżera pakietów.
Co sprawia, że IronPDF jest wartościowym narzędziem dla deweloperów?
IronPDF jest wartościowym narzędziem dla deweloperów ze względu na jego solidny zestaw funkcji, który obejmuje generowanie PDF, ekstrakcję tekstu i szyfrowanie. Obsługuje przetwarzanie asynchroniczne, pomagając deweloperom tworzyć responsywne i efektywne aplikacje.




