Task ist ein Objekt, das zur Darstellung asynchroner Vorgänge in C# verwendet wird. Es befindet sich im System.Threading.Tasks-Namespace. Task bietet eine High-Level-API für die Verarbeitung gleichzeitiger, asynchroner Vorgänge und erleichtert so das Schreiben von asynchronem Code in .NET-Anwendungen.
Task ist ein Objekt, das zur Darstellung asynchroner Vorgänge in C# verwendet wird und sich im System.Threading.Tasks-Namespace befindet. Task bietet eine High-Level-API für die Verarbeitung gleichzeitiger, asynchroner Vorgänge und erleichtert so das Schreiben von asynchronem Code in .NET-Anwendungen. Im Folgenden finden Sie eine detaillierte Beschreibung einiger Hauptfunktionen und der Verwendung von Task.
1. Erstellen Sie eine Aufgabe. Sie können die Task.Run-Methode verwenden, um eine Operation für einen Hintergrundthread auszuführen und ein Task-Objekt zurückzugeben, das die Operation darstellt.
csharp
Task task = Task.Run(() => { // 这里是后台线程上执行的代码 Console.WriteLine("Running in a separate thread."); });
2. Warten Sie, bis die Aufgabe abgeschlossen ist
Sie können die Task.Wait-Methode verwenden, um auf den Abschluss eines oder mehrerer Task-Objekte zu warten.
csharp
task.Wait(); // 等待 task 完成
Alternativ können Sie das Schlüsselwort „await“ (in der asynchronen Methode) verwenden, um asynchron auf den Abschluss der Aufgabe zu warten, ohne den aktuellen Thread zu blockieren.
csharp
await task; // 异步等待 task 完成
3. Status der Aufgabe
Das Aufgabenobjekt hat mehrere Zustände, einschließlich Created (erstellt), WaitingForActivation (wartet auf Aktivierung), Running (wird ausgeführt), RanToCompletion (wird bis zum Abschluss ausgeführt), Canceled (wurde abgebrochen) und Faulted (ein Fehler ist aufgetreten). Sie können den aktuellen Status einer Aufgabe über die Eigenschaft Task.Status überprüfen.
4. Ausnahmebehandlung
Wenn in der Aufgabe eine Ausnahme auftritt und die Ausnahme nicht abgefangen wird, ändert sich der Status der Aufgabe in „Fehlerhaft“. Sie können über die Task.Exception-Eigenschaft auf Ausnahmeinformationen zugreifen. Wenn Sie „await“ verwenden, löst der „await“-Ausdruck die Ausnahme erneut aus und Sie müssen sie in einem Try-Catch-Block behandeln.
csharp
try { await task; } catch (AggregateException ae) { // 处理异常 }
5. Der Rückgabewert von Task
Wenn Task eine Berechnung oder Operation darstellt und Sie das Ergebnis zurückgeben möchten, können Sie Task
csharp
Task<int> taskWithResult = Task.Run(() => { // 执行一些计算 return 42; }); int result = await taskWithResult; // 异步等待并获取结果
6. Abbruch einer Aufgabe
Sie können CancellationToken verwenden, um eine oder mehrere Aufgaben abzubrechen.
csharp
CancellationTokenSource cts = new CancellationTokenSource(); Task cancellableTask = Task.Run(() => { for (int i = 0; i < 100; i++) { cts.Token.ThrowIfCancellationRequested(); // 执行一些操作 } }, cts.Token); // 在某个时刻取消任务 cts.Cancel();
7. Kombination von Aufgaben
Sie können Task.WhenAll oder Task.WhenAny verwenden, um auf den Abschluss mehrerer Task-Objekte zu warten. Task.WhenAll wartet auf den Abschluss aller Aufgaben, während Task.WhenAny auf den Abschluss einer beliebigen Aufgabe wartet.
csharp
Task task1 = Task.Run(() => { /* ... */ }); Task task2 = Task.Run(() => { /* ... */ }); Task allTasks = Task.WhenAll(task1, task2); await allTasks; // 等待所有任务完成 csharp Task firstTaskToComplete = Task.WhenAny(task1, task2); await firstTaskToComplete; // 等待任何一个任务完成
8. Konfigurieren Sie den Ausführungskontext der Aufgabe
Durch die Konfiguration des TaskScheduler können Sie steuern, auf welchem Thread oder Thread-Pool die Aufgabe ausgeführt wird. Dies ist in Szenarien nützlich, in denen eine detailliertere Kontrolle der Thread-Nutzung erforderlich ist.
Task ist ein leistungsstarkes Tool für die asynchrone Programmierung in .NET, mit dem Sie reaktionsschnelleren und effizienteren Code schreiben können, insbesondere bei der Bearbeitung von I/O-intensiven oder rechenintensiven Aufgaben. Wenn Sie die grundlegenden Konzepte und die Verwendung von Aufgaben verstehen, können Sie die Vorteile des asynchronen Programmiermodells besser nutzen, um die Leistung und Skalierbarkeit Ihrer Anwendungen zu verbessern.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von C#Task. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!