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(); // 等待同步任務完成
區別總結:
Task.Run(async () => { })
表示非同步任務,可以包含await
操作進行非同步等待,返回的是一個Task
物件。Task.Run(() => { })
表示同步任務,不包含await
操作,任務是同步執行的,返回的也是一個Task
物件。
根據具體的需求和場景,選擇適合的方式來執行任務,可以有效地管理非同步和同步操作,保證程式的正確性和效能。希望這個解釋對你有幫助。如有任何疑問,請隨時告訴我