Je suis novice en matière de programmation parallèle. Il existe deux classes disponibles dans .NET : Task et Thread.
La question est donc : Quelle est la différence entre ces classes ? Quand est-il préférable d'utiliser Thread et quand Task ?
Je suis novice en matière de programmation parallèle. Il existe deux classes disponibles dans .NET : Task et Thread.
La question est donc : Quelle est la différence entre ces classes ? Quand est-il préférable d'utiliser Thread et quand Task ?
Thread
est un concept de niveau inférieur : si vous démarrez directement un fil de discussion, vous connaître il s'agira d'un thread séparé, plutôt que de s'exécuter sur le pool de threads, etc.
Task
est plus qu'une simple abstraction de "l'endroit où exécuter du code" - il s'agit en fait de "la promesse d'un résultat dans le futur". Voici donc quelques exemples différents :
Task.Delay
n'a pas besoin de temps CPU réel ; c'est comme programmer une minuterie qui se déclenchera dans le futur.WebClient.DownloadStringTaskAsync
ne prendra pas beaucoup de temps CPU localement ; il représente un résultat qui risque de passer la plupart de son temps en latence réseau ou en travail à distance (au niveau du serveur web)Task.Run()
vraiment est en disant "Je veux que vous exécutiez ce code séparément" ; le fil exact sur lequel ce code s'exécute dépend d'un certain nombre de facteurs.Notez que le Task<T>
est essentielle à la prise en charge de l'asynchronisme dans C# 5.
En général, je vous recommande d'utiliser l'abstraction de niveau supérieur chaque fois que vous le pouvez : dans un code C# moderne, vous devriez rarement avoir besoin de démarrer explicitement votre propre thread.
La tâche est un concept de plus haut niveau et cela signifie :
Vous ne pouvez pas utiliser l'exception Abort/ThreadAbortedException, vous devez prendre en charge la fonction cancel dans votre "code métier" en testant périodiquement l'indicateur IsCancellationRequested (et pour cela, évitez les connexions longues ou sans durée, par exemple à la base de données, sinon vous n'aurez jamais l'occasion de tester cet indicateur).
Il n'y a pas non plus de fonctionnalité des méthodes thread.Suspend et thread.Resume.
Mais vous obtenez deux nouveaux outils : continuations et tâches imbriquées/enfants Ces deux exemples illustrent l'idée et la syntaxe :
// continuation - execute the delegate, when all tasks[] had been finished Task.Factory.ContinueWhenAll( tasks, () => { int answer = tasks[0].Result + tasks[1].Result; Console.WriteLine("The answer is {0}", answer); } ); //StartNew - starts task immediately, parent ends whith child var parent = Task.Factory.StartNew (() => { var child = Task.Factory.StartNew(() => { //... }); }, TaskCreationOptions.AttachedToParent );
Le site Thread
est utilisée pour créer et manipuler un filetage dans Windows.
A Task
représente une opération asynchrone et fait partie de l'ensemble de l'opération. Bibliothèque parallèle des tâches L'ensemble des API permettant d'exécuter des tâches de manière asynchrone et en parallèle.
Dans le passé (c'est-à-dire avant la TPL), il était courant d'utiliser la fonction Thread
était l'un des moyens standard d'exécuter du code en arrière-plan ou en parallèle (une meilleure alternative était souvent d'utiliser une classe de type ThreadPool
), mais cette méthode était lourde et présentait plusieurs inconvénients, dont le moindre n'était pas l'augmentation des performances due à la création d'un tout nouveau thread pour effectuer une tâche en arrière-plan.
Aujourd'hui, l'utilisation des tâches et de la TPL est une bien meilleure solution dans 90 % des cas, car elle fournit des abstractions qui permettent une utilisation bien plus efficace des ressources du système. J'imagine qu'il existe quelques scénarios dans lesquels vous souhaitez contrôler explicitement le thread sur lequel vous exécutez votre code, mais de manière générale, si vous souhaitez exécuter quelque chose de manière asynchrone, votre premier port d'appel devrait être la TPL.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.