Task.Run(async () =>{}) 和 Task.Run(() =>{})區別

xxxyz發表於2024-03-28

Task.Run(async () => { }):

  • Task.Run(async () => { }) 表示執行一個非同步任務,傳入的是一個非同步 lambda 表示式。
  • 非同步 lambda 表示式可以包含 await 運算子,允許在非同步任務中等待其他非同步操作完成。
  • 如果非同步 lambda 表示式內部包含 await 操作,整個 Task.Run(async () => { }) 返回的是一個 Task 物件,可以透過 await 等待任務完成,並處理非同步操作的結果。

示例:

csharp複製程式碼
Task task = Task.Run(async () =>
{
    await Task.Delay(2000);
    Console.WriteLine("非同步任務完成");
});
await task; // 等待非同步任務完成

Task.Run(() => { }):

  • Task.Run(() => { }) 表示執行一個同步任務,傳入的是一個同步 lambda 表示式。
  • 同步 lambda 表示式不包含 await 運算子,表示任務是同步執行的,不會進行非同步等待。
  • Task.Run(() => { }) 返回的是一個 Task 物件,表示任務執行完成。

示例:

csharp複製程式碼
Task task = Task.Run(() =>
{
    Console.WriteLine("同步任務完成");
});
task.Wait(); // 等待同步任務完成

區別總結:

  1. Task.Run(async () => { }) 表示非同步任務,可以包含 await 操作進行非同步等待,返回的是一個 Task 物件。
  2. Task.Run(() => { }) 表示同步任務,不包含 await 操作,任務是同步執行的,返回的也是一個 Task 物件。

根據具體的需求和場景,選擇適合的方式來執行任務,可以有效地管理非同步和同步操作,保證程式的正確性和效能。希望這個解釋對你有幫助。如有任何疑問,請隨時告訴我

相關文章