.NET-HILFE

C# Async Await (Wie es für Entwickler funktioniert)

Veröffentlicht 14. Januar 2025
Teilen Sie:

Nutzen Sie die Vorteile der asynchronen Programmierung für eine verbesserte PDF-Verarbeitung in .NET-Anwendungen.

In modernen Web- und Serveranwendungen sind Leistung und Skalierbarkeit von entscheidender Bedeutung. Asynchrone Programmierung in C# unter Verwendung der async und awaitSchlüsselwörter ermöglichen es Entwicklern, nicht blockierende, hochgradig reaktionsschnelle Anwendungen zu erstellen. In Kombination mit leistungsstarken Bibliotheken wie IronPDF können Entwickler das volle Potenzial einer asynchronen Methode ausschöpfen, insbesondere bei der Arbeit mit I/O-gebundenen Aufgaben wie der PDF-Erstellung und -Manipulation.

In diesem Artikel werden wir untersuchen, wie man asynchronen Code schreibt mit IronPDF, vergleichen Sie synchrones Programmieren und asynchrones Programmieren und geben Sie Beispiele aus der Praxis für Aufgaben wie PDF-Generierung, Textextraktion und -manipulation. Zusätzlich werden wir Best Practices für das Handling mehrerer Aufgaben behandeln und demonstrieren, wie man Code schreibt, der sowohl synchronen als auch asynchronen Code nahtlos integriert.

Einführung in die asynchrone Programmierung

Asynchrones Programmieren in C# ist eine wesentliche Technik, die es Ihren Anwendungen ermöglicht, Aufgaben auszuführen, ohne den Hauptthread zu blockieren. Es ist besonders vorteilhaft für die Handhabung von langandauernden Operationen wie Datenbankabfragen, Datei-I/O oder in diesem Fall das Erstellen oder Manipulieren von PDF-Dateien.

IronPDF ist eine leistungsstarke Bibliothek, die die Manipulation von PDFs in .NET-Anwendungen vereinfacht. Es ermöglicht verschiedene PDF-Operationen, von der Umwandlung von HTML in PDF bis hin zur Extraktion von Text und Bildern. Durch die Integration von IronPDF mit asynchronen Programmiermustern können Entwickler die Leistung von Anwendungen, die mit PDFs arbeiten, erheblich verbessern.

Verstehen von Async/Await in C

Bevor wir uns damit beschäftigen, wie man async/await mit IronPDF verwendet, werfen wir zunächst einen kurzen Blick darauf, was diese Schlüsselwörter tun und warum sie in der modernen .NET-Entwicklung wichtig sind.

Was sind Async/Await?

Die Schlüsselwörter async und await werden verwendet, um asynchrone Methoden in C# zu definieren. Eine asynchrone Methode führt eine Operation aus, ohne den Hauptthread der Anwendung zu blockieren, wodurch die Anwendung reaktionsfähig bleibt, selbst wenn langwierige Aufgaben ausgeführt werden.

  • async: Dieses Schlüsselwort wird auf Methoden angewendet, die asynchrone Operationen ausführen sollen. Es zeigt an, dass die Methode mindestens einen Await-Ausdruck enthält.
  • await: Dieses Schlüsselwort wird verwendet, um die Ausführung der Methode zu pausieren, bis die erwartete Aufgabe abgeschlossen ist. Es stellt sicher, dass der Thread frei ist, um andere Aufgaben auszuführen, während er auf den Abschluss der Operation wartet.
public async Task WaitExampleAsync()
{
    await Task.Delay(1000); // Waits for 1 second without blocking the thread
    Console.WriteLine("Finished waiting asynchronously!");
}
public async Task WaitExampleAsync()
{
    await Task.Delay(1000); // Waits for 1 second without blocking the thread
    Console.WriteLine("Finished waiting asynchronously!");
}
Public Async Function WaitExampleAsync() As Task
	Await Task.Delay(1000) ' Waits for 1 second without blocking the thread
	Console.WriteLine("Finished waiting asynchronously!")
End Function
VB   C#

C# Async Await(Wie es für Entwickler funktioniert): Abbildung 1

Asynchrone Methoden verbessern die Reaktionsfähigkeit, indem sie den Hauptthread freigeben, um andere Operationen zu bearbeiten, während auf die Fertigstellung von Aufgaben gewartet wird.

Wesentliche Vorteile der asynchronen Programmierung

  • Nicht blockierende Operationen: Mit asynchroner Programmierung können zeitintensive Operationen(wie Datei-E/A oder Netzwerkanforderungen)blockiere nicht den Haupt-Thread. Dies ist entscheidend für Webanwendungen, bei denen nicht-blockierende Operationen sicherstellen, dass der Server mehrere Anfragen gleichzeitig bearbeiten kann.
  • Verbesserte Skalierbarkeit: Das Schlüsselwort async ermöglicht der Anwendung, mehr gleichzeitige Vorgänge mit weniger Threads zu verarbeiten, was die Skalierbarkeit verbessert.
  • Bessere Benutzererfahrung: Für Desktop- oder Webanwendungen sorgen asynchrone Operationen dafür, dass die Benutzeroberfläche reaktionsfähig auf Benutzereingaben bleibt, während Aufgaben im Hintergrund ausgeführt werden.

Synchroner und asynchroner Code

Verstehen, wann synchrone Programmierung statt asynchroner Programmierung eingesetzt werden sollte, ist entscheidend für ein effizientes Anwendungsdesign.

  • Synchrone Programmierung führt eine Operation nach der anderen aus und blockiert den Hauptthread, bis die Operation abgeschlossen ist. Zum Beispiel könnte eine Methode, die ein PDF mit synchronem Code erzeugt, so aussehen:
public void GeneratePdfSync()
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf("<h1>Sync PDF</h1>");
    pdf.SaveAs("output.pdf");
}
public void GeneratePdfSync()
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf("<h1>Sync PDF</h1>");
    pdf.SaveAs("output.pdf");
}
Public Sub GeneratePdfSync()
	Dim renderer As New ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf("<h1>Sync PDF</h1>")
	pdf.SaveAs("output.pdf")
End Sub
VB   C#

Obwohl einfach, kann dieser Ansatz Leistungsengpässe verursachen, insbesondere in Webanwendungen, die mehrere Aufgaben bearbeiten, oder in Szenarien, die intensive Ein-/Ausgabe erfordern.

  • Asynchrones Programmieren ermöglicht es, dass Operationen ausgeführt werden, ohne den Haupt-Thread zu blockieren. Dies ist besonders vorteilhaft für I/O-gebundene Aufgaben wie die PDF-Erzeugung, bei denen Sie asynchronen Code verwenden können, um die Anwendung reaktionsfähig zu halten.

    Im nächsten Abschnitt werden wir untersuchen, wie die asynchrone Programmierung mit IronPDF integriert werden kann, um Ihre PDF-Verarbeitung zu verbessern.

Integration von Async/Await mit IronPDF

IronPDFist eine leistungsstarke PDF-Bibliothek für .NET, die entwickelt wurde, um die Arbeit mit PDF-Dateien zu erleichtern. Es bietet Funktionen, die es Ihnen ermöglichen, Inhalte aus PDFs mit minimalem Aufwand bei der Einrichtung und Kodierung zu generieren, zu bearbeiten und zu extrahieren. In Kombination mit dem Async/Await-Muster von C# kann IronPDF PDF-bezogene Operationen auf nicht blockierende Weise ausführen, was sowohl die Leistung als auch die Skalierbarkeit in Anwendungen verbessert, die eine umfangreiche PDF-Verarbeitung erfordern.

IronPDF Überblick

C# Async Await(Wie es für Entwickler funktioniert): Abbildung 2

IronPDFermöglicht .NET-Entwicklern, PDF-Funktionalität direkt in ihre Anwendungen zu integrieren, sei es für Web- oder Desktop-Umgebungen. Hier sind einige der Hauptfunktionen, die IronPDF bietet:

  • HTML-zu-PDF-Konvertierung: IronPDF kann konvertierenHTML-Inhalt (einschließlich CSS, Bilder und JavaScript)in vollständig formatierte PDFs. Dies ist besonders nützlich für das Rendern dynamischer Webseiten oder Berichte als PDFs.
  • PDF-Bearbeitung: Mit IronPDF können Sie bestehende PDF-Dokumente bearbeiten, indem Sie Text, Bilder und Grafiken hinzufügen, sowieBearbeitungden Inhalt bestehender Seiten.
  • Text- und Bildextraktion: Die Bibliothek ermöglicht es Ihnen,text und Bilder extrahierenaus PDFs, was das Parsen und Analysieren von PDF-Inhalten erleichtert.
  • Formularausfüllung: IronPDF unterstützt das Ausfüllen vonFormularfelderin PDFs, was nützlich für die Erstellung maßgeschneiderter Dokumente ist.
  • Wasserzeichen: Es ist auch möglich, hinzuzufügenwasserzeichenin PDF-Dokumente für Branding oder Urheberrechtsschutz.

Warum IronPDF mit Async/Await verwenden?

Obwohl IronPDF nicht nativ asynchron ist, eignet es sich aufgrund der E/A-gebundenen Natur der meisten PDF-Verarbeitungsvorgänge gut für Async/Await-Muster. Zum Beispiel kann das Konvertieren von HTML in PDF oder das Laden eines großen PDF-Dokuments eine erhebliche Menge an Zeit in Anspruch nehmen, aber dies kann asynchron erfolgen, um das Blockieren des Hauptthreads zu vermeiden.

Hier sind einige Beispiele, wie IronPDF gut mit asynchroner Programmierung harmoniert:

  • PDF-Generierung: Wenn Ihre Anwendung mehrere PDFs basierend auf dynamischem Inhalt generieren muss, ermöglicht das asynchrone Ausführen dieser Prozesse, dass das System ansprechbar bleibt, während PDFs erstellt werden.
  • PDF-Manipulation: Wenn Sie große PDFs ändern müssen, wie zum Beispiel Wasserzeichen hinzufügen oder Dokumente zusammenführen, sorgt das asynchrone Ausführen dieser Aufgaben dafür, dass Ihre Anwendung nicht hängt, während diese zeitaufwendigen Operationen im Hintergrund verarbeitet werden.
  • Datei-I/O: Das Lesen aus und Schreiben in PDFs ist ein I/O-gebundener Vorgang. Asynchrones Programmieren ist ideal für diese Aufgaben, da es Systemressourcen freigibt und unnötiges Blockieren vermeidet.

Grundlegendes Beispiel: Asynchrone PDF-Erstellung mit IronPDF

Hier ist ein Beispiel für das Schreiben asynchronen Codes mit IronPDF zur Erstellung einer PDF-Datei:

using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        // Initialize renderer
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF Example</h1>"));
        // Save the generated PDF to a file
        await Task.Run(() => pdf.SaveAs("output.pdf"));
    }
}
using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        // Initialize renderer
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF Example</h1>"));
        // Save the generated PDF to a file
        await Task.Run(() => pdf.SaveAs("output.pdf"));
    }
}
Imports IronPdf
Public Class Program
	Public Shared Async Function Main(ByVal args() As String) As Task
		' Initialize renderer
		Dim renderer As New ChromePdfRenderer()
		' Use Task.Run to run the PDF generation asynchronously
		Dim pdf As PdfDocument = Await Task.Run(Function() renderer.RenderHtmlAsPdf("<h1>Async PDF Example</h1>"))
		' Save the generated PDF to a file
		Await Task.Run(Function() pdf.SaveAs("output.pdf"))
	End Function
End Class
VB   C#

C# Async Await(Wie es für Entwickler funktioniert): Abbildung 3

So funktioniert das

  1. Erstellen des HTML-zu-PDF-Konverters:

    Die ChromePdfRenderer-Klasse wird verwendet, um HTML-Inhalte in eine PDF-Datei zu konvertieren. In diesem Beispiel übergeben wir einfachen HTML-Inhalt als Zeichenkette.("

    Async-PDF-Beispiel

    "), aber in einer echten Anwendung könnte dies dynamisches HTML sein, wie z.B. eine Berichtsvorlage.

  2. Verwendung von Task.Run für die asynchrone PDF-Erstellung:

    Die RenderHtmlAsPdf-Methode ist standardmäßig nicht asynchron, daher verwenden wir Task.Run.()um die PDF-Erstellung auf einen Hintergrund-Thread auszulagern. Dies ist wichtig, da die PDF-Erstellung ressourcenintensiv und zeitaufwändig sein kann, insbesondere bei der Verarbeitung von großen oder komplexen Dokumenten.

  3. Speichern des PDF:

    Nachdem das PDF erstellt wurde, wird es mit pdf.SaveAs im Dateisystem gespeichert.(). Dieser I/O-Vorgang ist ebenfalls in ein Task.Run eingebunden.()um sicherzustellen, dass es den Hauptthread beim Speichern der Datei nicht blockiert.

  4. Ausstehende Operationen:

    Das Schlüsselwort await stellt sicher, dass jede asynchrone Operation abgeschlossen ist, bevor die nächste beginnt. Während auf die Fertigstellung der PDF-Erstellung gewartet wird, bleibt der Hauptthread frei, um andere Aufgaben zu erledigen.(z. B. andere HTTP-Anfragen in einer Webanwendung bedienen).

Umgang mit mehreren Aufgaben mit IronPDF

Für Anwendungen, die mit großen PDFs arbeiten, müssen möglicherweise mehrere Operationen durchgeführt werden, wie das Aufteilen, Zusammenführen oder Hinzufügen von Inhalten zu großen Dateien. Die Verwendung von async stellt sicher, dass während eine Operation verarbeitet wird, die Anwendung auf Benutzereingaben oder Anfragen reaktionsfähig bleibt.

Zum Beispiel könnten Sie mehrere asynchrone Operationen in einer Pipeline kombinieren:

using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument page = renderer.RenderHtmlAsPdf("<h1>Added Page</h1>");
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("output.pdf"));
        // Perform some operations asynchronously
        await Task.Run(() => pdf.ApplyWatermark("Confidential"));
        PdfDocument merged = await Task.Run(() => PdfDocument.Merge(pdf, page));
        await Task.Run(() => merged.SaveAs("processed_output.pdf"));
    }
}
using IronPdf;
public class Program
{
    public static async Task Main(string[] args)
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument page = renderer.RenderHtmlAsPdf("<h1>Added Page</h1>");
        // Use Task.Run to run the PDF generation asynchronously
        PdfDocument pdf = await Task.Run(() => PdfDocument.FromFile("output.pdf"));
        // Perform some operations asynchronously
        await Task.Run(() => pdf.ApplyWatermark("Confidential"));
        PdfDocument merged = await Task.Run(() => PdfDocument.Merge(pdf, page));
        await Task.Run(() => merged.SaveAs("processed_output.pdf"));
    }
}
Imports IronPdf
Public Class Program
	Public Shared Async Function Main(ByVal args() As String) As Task
		Dim renderer As New ChromePdfRenderer()
		Dim page As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Added Page</h1>")
		' Use Task.Run to run the PDF generation asynchronously
		Dim pdf As PdfDocument = Await Task.Run(Function() PdfDocument.FromFile("output.pdf"))
		' Perform some operations asynchronously
		Await Task.Run(Function() pdf.ApplyWatermark("Confidential"))
		Dim merged As PdfDocument = Await Task.Run(Function() PdfDocument.Merge(pdf, page))
		Await Task.Run(Function() merged.SaveAs("processed_output.pdf"))
	End Function
End Class
VB   C#

C# Async Await(Wie es für Entwickler funktioniert): Abbildung 4

In diesem Beispiel laden wir eine PDF-Datei und erstellen eine neue, fügen ein Wasserzeichen hinzu, führen die beiden PDFs zusammen und speichern sie, ohne den Hauptthread zu blockieren.

Best-Practices für asynchrone Operationen mit IronPDF

  • Überlegungen zum Thread-Pool: Da IronPDF auf Hintergrundthreads für die Verarbeitung angewiesen ist, sollten Sie den Thread-Pool berücksichtigen, wenn Sie Task.Run verwenden.(). Für häufige Aufgaben sollten Sie in Betracht ziehen, einen dedizierten Hintergrunddienst zu nutzen oder Aufgaben in eine Warteschlange zu stellen, um zu vermeiden, dass der Thread-Pool überlastet wird.
  • Vermeiden Sie async void-Methoden: Verwenden Sie immer async Task für Methoden, die asynchrone Operationen ausführen. Reservieren Sie "async void"-Methoden für Ereignishandler.
  • Abbruch-Token: Bei lang andauernden Vorgängen wie der PDF-Erstellung oder Textextraktion ist es eine gute Idee, Abbruch-Token zu unterstützen, um Benutzern die Möglichkeit zu geben, den Vorgang bei Bedarf abzubrechen. Dies stellt sicher, dass Ressourcen freigegeben werden, wenn die Operation nicht mehr benötigt wird.
public async Task GeneratePdfWithCancellationAsync(CancellationToken cancellationToken)
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF with Cancellation</h1>"), cancellationToken);
    if (cancellationToken.IsCancellationRequested)
    {
        Console.WriteLine("Operation was canceled.");
        return;
    }
    pdf.SaveAs("output.pdf");
}
public async Task GeneratePdfWithCancellationAsync(CancellationToken cancellationToken)
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF with Cancellation</h1>"), cancellationToken);
    if (cancellationToken.IsCancellationRequested)
    {
        Console.WriteLine("Operation was canceled.");
        return;
    }
    pdf.SaveAs("output.pdf");
}
Public Async Function GeneratePdfWithCancellationAsync(ByVal cancellationToken As CancellationToken) As Task
	Dim renderer As New ChromePdfRenderer()
	Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf("<h1>Async PDF with Cancellation</h1>"), cancellationToken)
	If cancellationToken.IsCancellationRequested Then
		Console.WriteLine("Operation was canceled.")
		Return
	End If
	pdf.SaveAs("output.pdf")
End Function
VB   C#
  • Fehlerbehandlung: Wie bei allen asynchronen Operationen sollte eine ordnungsgemäße Fehlerbehandlung für Ausnahmen sichergestellt werden, die während der PDF-Verarbeitung auftreten können, wie z.B. Probleme beim Dateizugriff oder ungültige Eingabedaten.
try
{
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF</h1>"));
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
try
{
    var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf("<h1>Async PDF</h1>"));
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
Try
	Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf("<h1>Async PDF</h1>"))
	pdf.SaveAs("output.pdf")
Catch ex As Exception
	Console.WriteLine($"Error: {ex.Message}")
End Try
VB   C#

Schlussfolgerung

IronPDFist eine vielseitige und leistungsstarke PDF-Bearbeitungsbibliothek, die sich hervorragend mit dem C# async/await-Muster verwenden lässt. Durch die Nutzung der asynchronen Programmierung mit IronPDF können Sie die Leistung und Skalierbarkeit Ihrer .NET-Anwendungen, die sich mit der Erzeugung und Bearbeitung von PDFs beschäftigen, erheblich verbessern. Egal, ob Sie dynamische Berichte erstellen, Daten aus Dokumenten extrahieren oder PDFs bearbeiten, die nahtlose Integration von IronPDF mit asynchroner Programmierung macht es zu einer ausgezeichneten Wahl für moderne .NET-Entwickler.

Vergessen Sie nicht, zu erkundenKostenlose Testversion von IronPDF, das Zugriff auf alle Funktionen bietet und es Ihnen ermöglicht, diese Fähigkeiten in Ihren eigenen Projekten auszuprobieren. Durch die Integration von asynchronen Operationen mit IronPDF können Sie schnellere und effizientere Anwendungen erstellen, die sich besser mit zunehmenden Arbeitslasten skalieren lassen.

< PREVIOUS
C#-Ereignisse (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Timespan-Format (Wie es für Entwickler funktioniert)