最佳答案
我刚才看到了3个关于 TPL 使用的例程,它们做着同样的工作; 下面是代码:
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();
}
我只是不明白为什么 MS 给出了3种不同的方式来运行 TPL 作业,因为他们都工作相同: Task.Start()
,Task.Run()
和 Task.Factory.StartNew()
。
告诉我,Task.Start()
、 Task.Run()
和 Task.Factory.StartNew()
是用于同一个目的,还是它们有不同的意义?
什么时候应该使用 Task.Start()
,什么时候应该使用 Task.Run()
,什么时候应该使用 Task.Factory.StartNew()
?
请帮助我了解他们的真正用途,每个场景在很大的细节与例子,谢谢。