Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von C#Task

Detaillierte Erläuterung von C#Task

小老鼠
小老鼠Original
2024-03-14 09:54:071355Durchsuche

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.");  
});

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

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!

Stellungnahme:
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