Aufgabenklasse
Die Task-Klasse ist eine asynchrone Operationsabstraktion, die nach .NET 4.0 bereitgestellt wurde, mit dem vollständigen Pfad zu System.Threading.Tasks.Task.
Die Task-Klasse wird verwendet, um asynchrone Operationen ohne Rückgabewert darzustellen, und für asynchrone Operationen mit Rückgabewerten sollte die Unterklasse Task der Task-Klasse verwendet werden<TResult>. Aufgaben, die von der Task-Klasse erstellt werden, werden dem Threadpool hinzugefügt.
Die <TResult>Hauptkonstruktoren der Task/Task-Klasse sind wie folgt:
Nach der Erstellung kann die Aufgabe mit der Start()-Methode gestartet werden:
In der tatsächlichen Entwicklung werden die statische Methode Run() der Task-Klasse oder die Mitgliedsmethode StartNew() der Factory-Klasse TaskFactory häufiger verwendet, um neue Aufgaben zu erstellen und zu starten.
Einige gängige Methoden in der Task-Klasse:
async/await-Schlüsselwort
C# 5.0 führte die Schlüsselwörter async und await ein, was eine bessere Unterstützung für Nebenläufigkeit auf Sprachebene bot.
Async wird verwendet, um asynkrone Methoden zu kennzeichnen: Das asynchrone Schlüsselwort ist ein kontextuelles Schlüsselwort und wird nur als Schlüsselwort behandelt, wenn eine Methode und Lambda modifiziert werden, und in anderen Bereichen als Identifikator. Das asynchrone Schlüsselwort kann statische Methoden markieren, aber keine Einstiegspunkte (Main()-Methoden).
Der Rückgabewert der mit asynchron markierten Methode muss <TResult>Task, Task oder void sein. await wird verwendet, um auf das Ergebnis der asynchronen Methode zu warten:
Das await-Schlüsselwort ist ebenfalls ein kontextuelles Schlüsselwort und wird nur in der asynchron getaggten Methode als Schlüsselwort betrachtet. Das Schlüsselwort await kann vor der asynchronen Methode und Task und Task verwendet werden<TResult>, um auf das Ende der asynchronen Task-Ausführung zu warten. Eine einfache asynkrone Methodenstruktur ist wie folgt:
Es ist nicht so, dass die Methode mit dem asynchronen Schlüsselwort markiert ist, sondern eine asynchrone Methode, und die Anweisungen, die direkt in der asynchronen Methode erscheinen, werden ebenfalls synchron ausgeführt,Inhalte, die asynchron ausgeführt werden, müssen mit der Task-Klasse ausgeführt werden.。 Tatsächlich wird eine asynchrone Methode, die keine await-Anweisungen enthält, synchron ausgeführt, woraufhin der Compiler eine Warnung ausgibt.
Ein einfaches Beispiel: Async/await, um Inhalte gleichzeitig auf dem Bildschirm auszugeben:
Ausgabe: (Mono 4.4.0 & ArchLinux x64)
Es ist nicht schwer anhand des obigen Programms zu erkennen, dass in der asynchron markierten asynchronen Schlüsselwort-Methode der Code vor der Verwendung von await synchron ausgeführt wird und nach dem Aufruf von await der restliche Code asynchron auf einem separaten Thread ausgeführt wird.
|