.NET TPL: Grundlegendes zu Task.Run(), Task.Factory.StartNew() und Task.Start()
Parallelität ist in modernen Anwendungen von entscheidender Bedeutung, und die Task Parallel Library (TPL) in .NET bietet leistungsstarke Tools für die Verwaltung gleichzeitiger Vorgänge. In diesem Artikel werden die Unterschiede zwischen Task.Run()
, Task.Factory.StartNew()
und Task.Start()
beim Erstellen und Starten von Aufgaben erläutert.
Aufgaben in TPL erstellen und ausführen
TPL-Aufgaben stellen unabhängige Arbeitseinheiten dar. Sie definieren die Arbeit mithilfe eines Delegaten oder Lambda-Ausdrucks und planen dann die Ausführung. Drei Hauptmethoden erleichtern dies:
Task.Start()
: Gilt als veraltet; Verwenden Sie stattdessen Task.Factory.StartNew()
.Task.Run()
: Diese vereinfachte Methode wurde in .NET 4.5 eingeführt und bietet eine sichere und effiziente Möglichkeit, Aufgaben im Thread-Pool auszuführen.Task.Factory.StartNew()
: Bietet eine detaillierte Kontrolle über die Aufgabenerstellung und -planung und ermöglicht so eine erweiterte Anpassung.Wichtige Unterschiede und Best Practices
Während alle drei Methoden letztendlich Aufgaben ausführen, variieren ihre Funktionalität und Eignung:
Task.Run()
: Der empfohlene Ansatz für die meisten Szenarien. Es nutzt implizit den Thread-Pool, vereinfacht die Aufgabenerstellung und verhindert potenzielle Probleme beim Anhängen untergeordneter Aufgaben. Aufgrund seiner unkomplizierten Natur eignet es sich ideal für allgemeine asynchrone Vorgänge.
Task.Factory.StartNew()
: Verwenden Sie dies, wenn das Standardverhalten von Task.Run()
nicht ausreicht. Sie können Optionen wie TaskCreationOptions.LongRunning
(für Aufgaben mit langer Laufzeit) angeben und einen benutzerdefinierten Planer auswählen. Dies bietet maximale Flexibilität, erfordert jedoch ein tieferes Verständnis der TPL-Interna.
Task.Start()
: Vermeiden Sie diese Methode, es sei denn, dies ist unbedingt erforderlich, da es an Kontrolle mangelt und möglicherweise Synchronisierungsprobleme auftreten können. Es wird am besten durch Task.Factory.StartNew()
.
Wann jede Methode anzuwenden ist
Task.Run()
: Die Standardauswahl für die meisten asynchronen Vorgänge. Aufgrund seiner Einfachheit und Effizienz ist es für die meisten Entwickler die bevorzugte Methode.
Task.Factory.StartNew()
: Verwenden Sie dies, wenn:
TaskCreationOptions
festlegen (z. B. LongRunning
).Task.Start()
.Task.Start()
: Vermeiden Sie im Allgemeinen die Verwendung dieser Methode.
Beispiel:
<code class="language-csharp">// Using Task.Run() Task taskA = Task.Run(() => Console.WriteLine("Hello from TaskA")); // Using Task.Factory.StartNew() with TaskCreationOptions.LongRunning Task taskB = Task.Factory.StartNew(() => { Console.WriteLine("Hello from TaskB"); }, TaskCreationOptions.LongRunning);</code>
Das obige ist der detaillierte Inhalt vonTask.Run(), Task.Factory.StartNew() und Task.Start(): Wann sollte ich sie verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!