Acabei de ver três rotinas sobre o uso do TPL que fazem o mesmo trabalho; aqui está o código:
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();
}
Eu só não entendo por que MS dá 3 maneiras diferentes de executar trabalhos em TPL porque todos eles trabalham o mesmo: Task.Start()
, Task.Run()
e Task.Factory.StartNew()
.
Diga-me, são Task.Start()
, Task.Run()
e Task.Factory.StartNew()
todos utilizados para a mesma finalidade ou eles têm um significado diferente?
Quando se deve usar Task.Start()
, quando se deve usar Task.Run()
e quando se deve usar Task.Factory.StartNew()
?
Por favor, ajude-me a entender seu uso real conforme o cenário em detalhes, com exemplos, obrigado.
Task.Start
é realmente útil.
Task.Run
- talvez isso responda à sua pergunta;)