Maison  >  Article  >  développement back-end  >  Explication détaillée de la tâche C#

Explication détaillée de la tâche C#

小老鼠
小老鼠original
2024-03-14 09:54:071301parcourir

Task est un objet utilisé pour représenter les opérations asynchrones en C#. Il se trouve dans l'espace de noms System.Threading.Tasks. Task fournit une API de haut niveau pour gérer les opérations asynchrones simultanées, ce qui facilite l'écriture de code asynchrone dans les applications .NET.

Explication détaillée de la tâche C#

Task est un objet utilisé pour représenter les opérations asynchrones en C#, et il se trouve dans l'espace de noms System.Threading.Tasks. Task fournit une API de haut niveau pour gérer les opérations asynchrones simultanées, ce qui facilite l'écriture de code asynchrone dans les applications .NET. Ce qui suit est une description détaillée de certaines des principales fonctionnalités et de l'utilisation de Task.

1. Créer une tâche Vous pouvez utiliser la méthode Task.Run pour effectuer une opération sur un thread d'arrière-plan et renvoyer un objet Task représentant l'opération.

csharp

Task task = Task.Run(() =>  
{  
    // 这里是后台线程上执行的代码  
    Console.WriteLine("Running in a separate thread.");  
});

2. Attendez la fin de la tâche

Vous pouvez utiliser la méthode Task.Wait pour attendre la fin d'un ou plusieurs objets Task.

csharp

task.Wait(); // 等待 task 完成

Alternativement, vous pouvez utiliser le mot-clé wait (dans la méthode async) pour attendre de manière asynchrone la fin de la tâche sans bloquer le thread en cours.

csharp

await task; // 异步等待 task 完成

3. Statut de la tâche

L'objet Task a plusieurs états, notamment Created (créé), WaitingForActivation (en attente d'activation), Running (en cours d'exécution), RanToCompletion (en cours d'exécution jusqu'à la fin), Canceled (a été annulé) et Faulted (une erreur s'est produite). Vous pouvez vérifier l'état actuel d'une tâche via la propriété Task.Status.

4. Gestion des exceptions

Si une exception se produit dans la tâche et qu'elle n'est pas interceptée, le statut de la tâche deviendra Faulted. Vous pouvez accéder aux informations sur les exceptions via la propriété Task.Exception. Lors de l'utilisation de wait, l'expression wait renverra l'exception et vous devrez la gérer dans un bloc try-catch.

csharp

try  
{  
    await task;  
}  
catch (AggregateException ae)  
{  
    // 处理异常  
}

5. La valeur de retour de Task

Si Task représente un calcul ou une opération et que vous souhaitez renvoyer le résultat, vous pouvez utiliser Taskb54c2c292509147c0b54128f4eb90887, où TResult est le type de la valeur de retour.

csharp

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

6. Annulation de la tâche

Vous pouvez utiliser CancellationToken pour annuler une ou plusieurs tâches.

csharp

CancellationTokenSource cts = new CancellationTokenSource();  
Task cancellableTask = Task.Run(() =>  
{  
    for (int i = 0; i < 100; i++)  
    {  
        cts.Token.ThrowIfCancellationRequested();  
        // 执行一些操作  
    }  
}, cts.Token);  
  
// 在某个时刻取消任务  
cts.Cancel();

7. Combinaison de tâches

Vous pouvez utiliser Task.WhenAll ou Task.WhenAny pour attendre la fin de plusieurs objets Task. Task.WhenAll attend la fin de toutes les tâches, tandis que Task.WhenAny attend la fin d'une tâche.

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. Configurez le contexte d'exécution de la tâche

En configurant le TaskScheduler, vous pouvez contrôler sur quel thread ou pool de threads la tâche s'exécute. Ceci est utile dans les scénarios où un contrôle plus fin sur l’utilisation des threads est requis.

Task est un outil puissant pour gérer la programmation asynchrone dans .NET, vous permettant d'écrire du code plus réactif et plus efficace, en particulier lorsqu'il s'agit de tâches gourmandes en E/S ou en calcul. En comprenant les concepts de base et l'utilisation des tâches, vous pourrez mieux tirer parti du modèle de programmation asynchrone pour améliorer les performances et l'évolutivité de vos applications.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn