Je viens tout juste d'apprendre les nouvelles bibliothèques Threading et Parallel dans .Net 4
Dans le passé, je créais un nouveau sujet tel que so (à 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
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 convient.
Si votre travail en arrière-plan est long, vous devez le spécifier en utilisant l'option de tâche appropriée.
Vous devriez préférer Task Parallel Library à la gestion de threads explicite, car elle est plus optimisée. Aussi, vous avez plus de fonctionnalités comme Continuation.
La tâche vous donne tout le bien de son API:
Task.ContinueWith
)Notez que dans les deux cas, vous pouvez légèrement simplifier votre code avec les conversions de groupe de méthodes:
DataInThread = new Thread(ThreadProcedure);
// Or...
Task t = Task.Factory.StartNew(ThreadProcedure);
Dans le premier cas, vous démarrez simplement un nouveau thread alors que dans le second, vous entrez dans le pool de threads.
Le travail thread pool 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'entrer dans le pool de threads:
Votre premier bloc de code indique à CLR de créer pour vous un thread (par exemple, T) pouvant être exécuté en arrière-plan (utilisez les threads du pool de threads lors de la planification de T). En résumé, vous demandez explicitement au CLR de créer un fil pour vous permettre de faire quelque chose et appelez la méthode Start () sur le fil pour commencer.
Votre deuxième bloc de code fait la même chose mais délègue (implicitement le handover) la responsabilité de créer un thread (arrière-plan - qui s'exécute à nouveau dans le pool de threads) et le thread de démarrage via la méthode StartNew dans l'implémentation 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 sur lesquelles vous pouvez chercher sur Google ou voir les autres réponses de mes collègues collaborateurs.