Task.Run(async () =>{}) 和 Task.Run(() =>{})区别

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 对象。

根据具体的需求和场景,选择适合的方式来运行任务,可以有效地管理异步和同步操作,保证程序的正确性和性能。希望这个解释对你有帮助。如有任何疑问,请随时告诉我

posted @ 2024-03-28 16:33  xxxyz  阅读(2013)  评论(0)    收藏  举报