Classe de tâche
La classe Task est une abstraction d’opération asynchrone fournie après .NET 4.0, avec le chemin complet vers System.Threading.Tasks.Task.
La classe Task est utilisée pour représenter des opérations asynchrones sans valeur de retour, et pour les opérations asynchrones avec des valeurs de retour, la sous-classe Task de la classe Task doit être <TResult>utilisée. Les tâches créées par la classe Task sont ajoutées au pool de threads.
Les <TResult>principaux constructeurs de la classe Tâche/Tâche sont les suivants :
Une fois créée, la tâche peut être lancée en utilisant la méthode Start() :
Dans le développement réel, la méthode statique Run() de la classe Task ou la méthode membre StartNew() de la classe usine TaskFactory sont plus souvent utilisées pour créer et démarrer de nouvelles tâches.
Quelques méthodes courantes dans la classe Task :
mot-clé async/await
C# 5.0 a introduit les mots-clés asynchrones et await, ce qui offrait un meilleur support de la concurrence au niveau de la langue.
L’asynchrone est utilisé pour marquer les méthodes asynchrones : Le mot-clé asynchrone est un mot-clé contextuel et ne sera traité comme un mot-clé que lors de la modification d’une méthode et d’un Lambda, et sera traité comme un identifiant dans d’autres domaines. Le mot-clé asynchrone peut marquer les méthodes statiques, mais pas les points d’entrée (méthodes Main()).
La valeur de retour de la méthode taguée asynchrone doit être <TResult>Task, Task ou void. await est utilisé pour attendre le résultat de la méthode asynchrone :
Le mot-clé await est également un mot-clé contextuel et n’est considéré comme un mot-clé que dans la méthode asynchrone balisée. Le mot-clé await peut être utilisé avant la méthode asynchrone et Task, et <TResult>Task, pour attendre la fin de l’exécution asynchrone. Une structure simple de méthode asynchrone est la suivante :
Ce n’est pas que la méthode soit marquée par le mot-clé asynchrone, c’est une méthode asynchrone, et les instructions qui apparaissent directement à l’intérieur de la méthode asynchrone sont également exécutées de manière synchrone,Le contenu exécuté de manière asynchrone doit être exécuté en utilisant la classe Task。 En fait, une méthode asynchrone ne contenant aucune instruction await sera exécutée de manière synchrone, moment où le compilateur enverra un avertissement.
Exemple simple, utiliser async/await pour produire du contenu simultanément à l’écran :
Sortie : (Mono 4.4.0 & ArchLinux x64)
Il n’est pas difficile de voir d’après le programme ci-dessus que dans la méthode asynchrone balisée asynchrone par mot-clé, le code avant d’utiliser await est exécuté de manière synchrone, et après l’appel await, le code restant s’exécute asynchrone sur un thread séparé.
|