using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
In diesem Artikel tauchen wir in die Grundlagen von Task.Run in C# ein, einer leistungsstarken Konstruktion in der asynchronen Programmierung. Asynchrone Programmierung ist für das Schreiben von reaktionsschnellen und effizienten Anwendungen unverzichtbar, insbesondere wenn es um Vorgänge geht, die die Ausführung Ihrer Anwendung blockieren können, wie Netzwerkaufrufe oder rechenintensive Aufgaben. Task.Run ist eine der häufig verwendeten asynchronen Methoden, um diese Operationen in einen Hintergrund-Thread auszulagern, wodurch die Leistung und Reaktionsfähigkeit von Anwendungen verbessert wird. Wir werden die Methode Task.Run und die umfassenden Funktionalitäten der IronPDF-Bibliothek damit erkunden.
Verstehen von Task.Run
Task.Run ist eine Aufrufmethode, die von .NET Core bereitgestellt wird und es Entwicklern ermöglicht, CPU-gebundene oder I/O-gebundene Operationen asynchron auf einem separaten Thread aus dem Threadpool auszuführen. Diese Methode ist vorteilhaft, um den UI-Thread reaktionsschnell zu halten, indem ein asynchroner Thread für die Durchführung lang laufender Operationen verwendet wird. Es vereinfacht das Starten einer neuen asynchronen Operation auf einem anderen Thread, die dann mit dem Schlüsselwort await abgewartet werden kann.
Grundlegende Verwendung von Task.Run
Betrachten Sie ein einfaches Beispiel, bei dem Sie eine langwierige Berechnung durchführen müssen. Anstatt dies direkt im Hauptthread auszuführen, was die Benutzeroberfläche blockieren würde, können Sie Task.Run verwenden, um es im Hintergrund zu verarbeiten:
static async Task PerformComputation()
{
int result = await Task.Run(() =>
{
int sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
return sum;
});
Console.WriteLine($"The result is {result}");
}
static async Task PerformComputation()
{
int result = await Task.Run(() =>
{
int sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
return sum;
});
Console.WriteLine($"The result is {result}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText $csharpLabel
Ausgabe
Im obigen Beispiel stellt der Lambda-Ausdruck innerhalb von Task.Run einen Block von CPU-gebundenem Code dar, der eine große Anzahl von Zahlen aufsummiert. Indem Sie Task.Run verwenden, wird diese Berechnung an einen Hintergrundthread ausgelagert, damit der Hauptthread reaktionsfähig bleibt. Das Schlüsselwort await task wird verwendet, um asynchron zu warten, bis die Aufgabe abgeschlossen ist, ohne den aktuellen Thread zu blockieren.
Tieferes Verständnis von asynchronen Tasks und Threads
Wenn Sie Task.Run aufrufen, weist das .NET-Framework einen Thread aus dem Threadpool zu, um die angegebene Aufgabe auszuführen. Dies ist effizient, da es den Overhead vermeidet, der durch die Erstellung neuer Threads für jede Aufgabe entsteht, und hilft, die Systemressourcen effektiver zu nutzen. Der Thread-Pool verwaltet eine Reihe von Worker-Threads für Ihre Anwendung, die mehrere Aufgaben gleichzeitig auf mehreren Kernen ausführen können.
Handhabung mehrerer Aufgaben
Sie können eine neue Aufgabe parallel mit Task.Run ausführen, was für Anwendungen vorteilhaft ist, die mehrere unabhängige Operationen gleichzeitig durchführen müssen. Hier erfahren Sie, wie Sie mehrere Aufgaben starten können:
static async Task HandleMultipleTasks()
{
Task<int> task1 = Task.Run(() =>
{
return PerformLongRunningWork("Task 1");
});
Task<int> task2 = Task.Run(() =>
{
return PerformLongRunningWork("Task 2");
});
// Wait for tasks to finish and print the results
int[] results = await Task.WhenAll(task1, task2);
Console.WriteLine($"Results of Task 1: {results[0]}, Task 2: {results[1]}");
}
static int PerformLongRunningWork(string taskName)
{
int result = 0;
for (int i = 0; i < 500000; i++)
{
result += i;
}
Console.WriteLine($"{taskName} completed.");
return result;
}
static async Task HandleMultipleTasks()
{
Task<int> task1 = Task.Run(() =>
{
return PerformLongRunningWork("Task 1");
});
Task<int> task2 = Task.Run(() =>
{
return PerformLongRunningWork("Task 2");
});
// Wait for tasks to finish and print the results
int[] results = await Task.WhenAll(task1, task2);
Console.WriteLine($"Results of Task 1: {results[0]}, Task 2: {results[1]}");
}
static int PerformLongRunningWork(string taskName)
{
int result = 0;
for (int i = 0; i < 500000; i++)
{
result += i;
}
Console.WriteLine($"{taskName} completed.");
return result;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
In diesem Beispiel startet HandleMultipleTasks zwei asynchrone Aufgaben. Die Task.WhenAll-Methode wird verwendet, um auf jede asynchrone Aufgabe zu warten, was ermöglicht, dass sie gleichzeitig ausgeführt werden. Sobald beide Aufgaben abgeschlossen sind, wird mit der nächsten Codezeile fortgefahren.
Bewährte Praktiken und Überlegungen
Während Task.Run ein wertvolles Werkzeug für die asynchrone Programmierung ist, ist es wichtig, es mit Bedacht einzusetzen, um häufige Fallstricke wie die übermäßige Nutzung von Systemressourcen oder unerwartetes Verhalten in Ihrer Anwendung zu vermeiden.
Task.Run für CPU-gebundene Operationen verwenden
Es ist am besten, Task.Run für CPU-gebundene Arbeiten zu verwenden und nicht für I/O-gebundene Operationen. Verwenden Sie für E/A-gebundene Aufgaben die in .NET-Bibliotheken verfügbaren asynchronen E/A-Operationen.
Seien Sie vorsichtig mit Thread-Pool-Threads
Denken Sie daran, dass Task.Run Thread-Pool-Threads verwendet. Wenn diese Threads durch zu viele gleichzeitige Vorgänge erschöpft werden, kann dies zu Verzögerungen beim Start von Aufgaben und zu einer allgemeinen Verlangsamung der Anwendung führen.
Vermeiden Sie synchronen Code
Wenn auf von Task.Run gestartete Aufgaben gewartet wird, vermeiden Sie die Verwendung von synchronen Warteoperationen wie den Methoden Task.Result oder Task.Wait, da diese zu Deadlocks führen können, insbesondere in Kontexten wie UI-Anwendungen.
IronPDF Einführung
IronPDF ist eine C#-Bibliothek, die es Ihnen ermöglicht, PDF-Dateien direkt aus HTML, CSS und JavaScript zu erstellen und zu verwalten. Es wurde für .NET-Entwickler entwickelt und vereinfacht die PDF-Erstellung, indem es bereits vorhandene Web-Inhalte verwendet und sicherstellt, dass das, was Sie im Browser sehen, auch in der PDF-Datei enthalten ist. Es eignet sich für verschiedene .NET-Anwendungen, egal ob sie web-, desktop- oder serverbasiert sind, und bietet Funktionen wie PDF-Bearbeitung, Formularverarbeitung und sichere Dokumentenerstellung.
Einfacher ausgedrückt: IronPDF hilft Ihnen, Webseiten einfach und präzise in PDFs umzuwandeln. Sie müssen sich nicht mit komplexen APIs herumschlagen; entwerfen Sie einfach Ihre Seite in HTML und IronPDF erledigt den Rest. Es funktioniert auf verschiedenen .NET-Plattformen und bietet Werkzeuge zur Anpassung, Sicherung und Interaktion mit Ihren PDFs.
IronPDF mit Task.Run
Code-Beispiel
Hier ist ein einfaches Beispiel für die Verwendung von IronPDF mit Task.Run in C#. Dieses Beispiel zeigt, wie man aus HTML-Inhalten asynchron eine PDF-Datei erzeugt. Dies ist besonders nützlich, um das Einfrieren der Benutzeroberfläche in Desktop-Anwendungen zu vermeiden oder die Last in Web-Anwendungen zu verwalten:
using IronPdf;
using System.Threading.Tasks;
public class PdfGenerator
{
public static async Task CreatePdfAsync()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is an async PDF generation.</p>";
// Run the PDF generation in a separate task
var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(htmlContent));
// Save the PDF to a file
pdf.SaveAs("asyncIronPDF.pdf");
}
// Usage
public static void Main()
{
License.LicenseKey = "License-Key";
Task.Run(async () => await PdfGenerator.CreatePdfAsync()).Wait();
System.Console.WriteLine("PDF generated.");
}
}
using IronPdf;
using System.Threading.Tasks;
public class PdfGenerator
{
public static async Task CreatePdfAsync()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is an async PDF generation.</p>";
// Run the PDF generation in a separate task
var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(htmlContent));
// Save the PDF to a file
pdf.SaveAs("asyncIronPDF.pdf");
}
// Usage
public static void Main()
{
License.LicenseKey = "License-Key";
Task.Run(async () => await PdfGenerator.CreatePdfAsync()).Wait();
System.Console.WriteLine("PDF generated.");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText $csharpLabel
Ausgabe
Dieses Beispiel kapselt die PDF-Erstellung innerhalb einer Aufgabe ein, was es für Anwendungen geeignet macht, die nicht blockierende Operationen erfordern.
Schlussfolgerung
Task.Run ist eine leistungsstarke Funktion in C# zur effektiven Verwaltung von asynchronen Aufgaben. Wenn Sie wissen, wie man sie richtig einsetzt, können Sie die Leistung und Reaktionsfähigkeit Ihrer Anwendungen verbessern. Denken Sie daran, ob eine Aufgabe CPU- oder E/A-gebunden ist, wenn Sie entscheiden, wie Sie asynchrone Operationen implementieren, und versuchen Sie immer, den UI-Thread von schweren Verarbeitungsaufgaben freizuhalten.
Entwickler können IronPDF mit der kostenlosen Testversion testen, bevor sie sich zum Kauf entscheiden. Der Startpreis für eine Lizenz beträgt $749.
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS C# Volatile (Wie es für Entwickler funktioniert)
NÄCHSTES > C# Nito.Asyncex (Wie es für Entwickler funktioniert)