Heim > Backend-Entwicklung > C#.Net-Tutorial > Detaillierte Erläuterung von C#Task

Detaillierte Erläuterung von C#Task

小老鼠
Freigeben: 2024-03-14 09:54:07
Original
1434 Leute haben es durchsucht

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.

Detaillierte Erläuterung von C#Task

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.");  
});
Nach dem Login kopieren

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 完成
Nach dem Login kopieren

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 完成
Nach dem Login kopieren

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)  
{  
    // 处理异常  
}
Nach dem Login kopieren

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 verwenden, wobei TResult der Typ des Rückgabewerts ist.

csharp

Task<int> taskWithResult = Task.Run(() =>  
{  
    // 执行一些计算  
    return 42;  
});  
  
int result = await taskWithResult; // 异步等待并获取结果
Nach dem Login kopieren

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();
Nach dem Login kopieren

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; // 等待任何一个任务完成
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage