J'apprends juste les nouvelles bibliothèques Threading et Parallel dans .Net 4
Dans le passé, je créerais un nouveau Thread comme ceci (à titre d'exemple):
DataInThread = new Thread(new ThreadStart(ThreadProcedure));
DataInThread.IsBackground = true;
DataInThread.Start();
Maintenant je peux faire:
Task t = Task.Factory.StartNew(() =>
{
ThreadProcedure();
});
Quelle est la différence le cas échéant?
Merci
Réponses:
Il y a une grosse différence. Les tâches sont planifiées sur le ThreadPool et peuvent même être exécutées de manière synchrone si cela est approprié.
Si vous avez un travail d'arrière-plan de longue durée, vous devez le spécifier en utilisant l'option de tâche appropriée.
Vous devriez préférer la bibliothèque parallèle de tâches à la gestion explicite des threads, car elle est plus optimisée. Vous avez également plus de fonctionnalités telles que la continuation.
la source
La tâche vous donne toute la bonté de l'API de tâche:
Task.ContinueWith
)Notez que dans les deux cas, vous pouvez simplifier légèrement votre code avec les conversions de groupes de méthodes:
la source
Thread
c'est de très bas niveau par rapport àTask
(j'ai un article de blog qui entre dans les détails). Je donne une sorte de conférence «Utiliser les tâches dans le monde réel» à Grand Rapids DevDay . Le discours s'appelle "Thread is Dead", car il n'y a plus besoin deThread
(sauf si vous implémentez aTaskScheduler
).Thread
est mort, quand il s'agit d'être utilisé comme fil d'arrière-plan?Thread
faire (ouBackgroundWorker
) qui ne puisse être fait avec plus d'éléganceTask
et une solution appropriéeTaskScheduler
.Thread
?Task
exécuter un sur un thread spécifique, utilisez un fichier appropriéTaskScheduler
, par exempleAsyncContextThread
. Cependant, ce n'est généralement pas nécessaire; les programmateursSynchronizationContext
,ThreadPool
etConcurrentExclusiveSchedulerPair
sont suffisants pour la plupart des programmes.Dans le premier cas, vous démarrez simplement un nouveau thread tandis que dans le second cas, vous entrez dans le pool de threads.
Le travail du pool de threads consiste à partager et à recycler les threads. Cela permet d'éviter de perdre quelques millisecondes à chaque fois que nous devons créer un nouveau thread.
Il existe plusieurs façons d'accéder au pool de threads:
la source
Votre premier bloc de code indique à CLR de créer pour vous un thread (par exemple. T) qui peut être exécuté en arrière-plan (utilisez les threads de pool de threads lors de la planification de T). En résumé, vous demandez explicitement à CLR de créer un thread pour que vous puissiez faire quelque chose et appelez la méthode Start () sur le thread pour démarrer.
Votre deuxième bloc de code fait la même chose, mais délègue (transfert implicite) la responsabilité de créer un thread (en arrière-plan, qui s'exécute à nouveau dans le pool de threads) et le thread de départ via la méthode StartNew dans l'implémentation de Task Factory.
C'est une différence rapide entre les blocs de code donnés. Cela dit, il y a peu de différences détaillées que vous pouvez google ou voir d'autres réponses de mes collègues contributeurs.
la source