Heim >Backend-Entwicklung >C++ >Task.Start(), Task.Run() und Task.Factory.StartNew(): Welche Methode sollte ich verwenden?
Detaillierte Erläuterung der Verwendung von Task.Start()
, Task.Run()
und Task.Factory.StartNew()
in der Task Parallel Library (TPL)
Task Parallel Library (TPL) bietet mehrere Methoden zum Erstellen und Starten von Aufgaben, darunter Task.Start()
, Task.Run()
und Task.Factory.StartNew()
. Obwohl beide zur Durchführung asynchroner Vorgänge verwendet werden, gibt es geringfügige Unterschiede in der Verwendung.
Task.Start()
: Eine veraltete Methode
Task.Start()
ist ein älterer Ansatz, der die explizite Erstellung des Task-Objekts vor dem Starten der Aufgabe erfordert. Es ermöglicht die Angabe zusätzlicher Optionen über den Parameter TaskCreationOptions
. Es wird jedoch empfohlen, stattdessen Task.Run()
und Task.Factory.StartNew()
zu verwenden.
Task.Run()
: Vereinfachte Optionen
Task.Run()
ist eine Abkürzungsmethode, die intern Task.Factory.StartNew()
mit Standardparametern verwendet. Es ist für einfache Szenarien konzipiert, die keine benutzerdefinierten Aufgabenoptionen erfordern. Im Gegensatz zu Task.Start()
muss das Task-Objekt vor dem Start nicht erstellt werden.
Task.Factory.StartNew()
: Vielseitige Auswahl
Task.Factory.StartNew()
ist die gebräuchlichste Methode. Es bietet Optionen zum Anpassen der Aufgabenerstellung, z. B. die Angabe von TaskScheduler
, CancellationToken
und TaskCreationOptions
. Dies ermöglicht eine differenzierte Kontrolle über die Aufgabenausführung.
Wählen Sie die geeignete Methode
Task.Run()
, wenn die Standardeinstellungen ausreichend sind. TaskScheduler
, wenn Sie benutzerdefinierte Aufgabenoptionen benötigen (z. B. das Festlegen von Task.Factory.StartNew()
oder das Steuern der Thread-Affinität). Task.Start()
sollte vermieden werden, es sei denn, es besteht ein besonderer Bedarf für eine erweiterte Aufgabenanpassung. Beispielverwendung
Der folgende Codeausschnitt veranschaulicht die Verwendung dieser Methoden:
<code class="language-csharp">// Task.Start() var task = new Task(() => Console.WriteLine("Task started.")); task.Start(); // Task.Run() Task.Run(() => Console.WriteLine("Task started.")); // Task.Factory.StartNew() var task = Task.Factory.StartNew( () => Console.WriteLine("Task started."), TaskCreationOptions.PreferFairness);</code>
Fazit
Während Task.Start()
, Task.Run()
und Task.Factory.StartNew()
ähnliche Funktionen haben, sollte ihre Verwendung auf den spezifischen Anforderungen Ihrer Anwendung basieren. Task.Run()
eignet sich für die meisten gängigen Szenarien, während Task.Factory.StartNew()
erweiterte Anpassungsoptionen bietet. Aufgrund seiner veralteten Natur wird die Verwendung von Task.Start()
im Allgemeinen nicht empfohlen.
Das obige ist der detaillierte Inhalt vonTask.Start(), Task.Run() und Task.Factory.StartNew(): Welche Methode sollte ich verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!