Quant à l'usage de la Tâche.Start() , La Tâche.Run() et de la Tâche.Usine.StartNew()
Je viens de voir 3 routines concernant TPL utilisation qui font le même travail; voici le code:
public static void Main()
{
Thread.CurrentThread.Name = "Main";
//Create a task and supply a user delegate by using a lambda expression.
Task taskA = new Task( () => Console.WriteLine("Hello from taskA."));
//Start the task.
taskA.Start();
//Output a message from the calling thread.
Console.WriteLine("Hello from thread '{0}'.",
Thread.CurrentThread.Name);
taskA.Wait();
}
public static void Main()
{
Thread.CurrentThread.Name = "Main";
//Define and run the task.
Task taskA = Task.Run( () => Console.WriteLine("Hello from taskA."));
//Output a message from the calling thread.
Console.WriteLine("Hello from thread '{0}'.",
Thread.CurrentThread.Name);
taskA.Wait();
}
public static void Main()
{
Thread.CurrentThread.Name = "Main";
//Better: Create and start the task in one operation.
Task taskA = Task.Factory.StartNew(() => Console.WriteLine("Hello from taskA."));
//Output a message from the calling thread.
Console.WriteLine("Hello from thread '{0}'.",
Thread.CurrentThread.Name);
taskA.Wait();
}
Je ne comprends pas pourquoi MS donne 3 façons différentes pour exécuter des travaux dans le TPL, car ils fonctionnent tous de la même: Task.Start()
, Task.Run()
et Task.Factory.StartNew()
.
Dites-moi,Task.Start()
, Task.Run()
et Task.Factory.StartNew()
tous utilisé pour le même but, ou ont-ils une signification différente?
Quand doit-on utiliser Task.Start()
, quand doit-on utiliser Task.Run()
et quand doit-on utiliser Task.Factory.StartNew()
?
S'il vous plaît aidez-moi à comprendre la réalité de leur utilisation par le scénario en détail avec des exemples, merci.
- il y a un l'ancien article expliquant qu'ici et ici pour le plus récent
Task.Run
- peut-être que cela va répondre à votre question 😉 - Ici est un exemple de cas où
Task.Start
est réellement utile. - Double Possible de Quelle est la différence entre la Tâche.Run() et de la Tâche.Usine.StartNew()
Vous devez vous connecter pour publier un commentaire.
Task.Run
est un raccourci pourTask.Factory.StartNew
spécifiques sûr arguments:Il a été ajouté dans .Net 4.5 pour aider avec de plus en plus fréquents d'utilisation de
async
et de déchargement de travail à laThreadPool
.Task.Factory.StartNew
(ajouté avec TPL dans .Net 4.0) est beaucoup plus robuste. Vous devez utiliser uniquement siTask.Run
n'est pas assez, par exemple lorsque vous souhaitez utiliserTaskCreationOptions.LongRunning
(même si c'est inutile lorsque le délégué est asynchrone. Plus sur que sur mon blog: LongRunning Est Inutile Pour La Tâche.Courir Avec async-attendent). Plus surTask.Factory.StartNew
dans De la tâche.Run vs Tâche.Usine.StartNewNe jamais créer un
Task
et appelStart()
, à moins de trouver une très bonne raison de le faire. Il ne doit être utilisé que si vous avez une partie qui a besoin de créer des tâches, mais pas de les planifier et d'autre part que les horaires sans la création. C'est presque jamais une solution appropriée et pourrait être dangereux. De plus en "La tâche.Usine.StartNew" vs "nouvelle Tâche(...).Démarrer"En conclusion, la plupart du temps l'utilisation
Task.Run
, utilisezTask.Factory.StartNew
si vous devez et ne jamais utiliserStart
.