ฉันเพิ่งเห็น 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()
?
โปรดช่วยฉันเข้าใจการใช้งานจริงของพวกเขาตามสถานการณ์โดยมีรายละเอียดที่ดีพร้อมตัวอย่างขอบคุณ
Task.Run
- บางทีนี่อาจจะตอบคำถามของคุณ;)