首页 > 其他分享 >Task.Run(async () =>{}) 和 Task.Run(() =>{})区别

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

时间:2024-03-28 16:47:40浏览次数:19  
标签:异步 Task Run await 任务 async

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

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

标签:异步,Task,Run,await,任务,async
From: https://www.cnblogs.com/xxxyz/p/18102034

相关文章

  • TextBlock 的run元素
    这里第一个run的content滚滚长江东逝水,浪花淘尽英雄。是非成败转头空。青山依旧在,几度夕阳红。和第二个的Text有什么区别?<TextBlockx:Name="textblock"Width="320"Height="100"FontSize="......
  • STS中maven项目打包报错: No compiler is provided in this environment. Perhaps you
    这个报错的意思是在这个环境中没有编译环境,即不存在javac.exe,然后说一下JRE和JDK的区别:JRE(JavaRuntimeEnvironment):1、JRE是Java运行时环境,用于在计算机上运行Java程序。2、包含Java虚拟机(JVM)和Java核心类库,以及运行Java程序所需的其他支持文件。3、JRE通常用......
  • npm run dev 和 npm run serve 区别
    在日常运行vue项目中在终端运行命令有时用到npmrunserve有时是npmrundev。那么,什么时候用到serve,什么时候用到dev呢?他们的区别是什么?一般在vue3.x的时候用npmrunserve,vue2.x项目运行的时候用到npmrundev,dev是vuecli2的默认执行命令,serve是vuecli4的......
  • iOS - Runtime - Class-方法缓存(cache_t)
    文章目录iOS-Runtime-Class-方法缓存(cache_t)1.散列表的存取值iOS-Runtime-Class-方法缓存(cache_t)Class内部结构中有个方法缓存(cache_t),用散列表(哈希表)来缓存曾经调用过的方法,可以提高方法的查找速度。(使用空间换时间的方式来提升速度)其中,_buckets就......
  • iOS - Runtime-消息机制-objc_msgSend()
    iOS-Runtime-消息机制-objc_msgSend()前言本章主要介绍消息机制-objc_msgSend的执行流程,分为消息发送、动态方法解析、消息转发三个阶段,每个阶段可以做什么。还介绍了super的本质是什么,如何调用的1.objc_msgSend执行流程OC中的方法调用,其实都是转换为objc_msgSend函......
  • 在 Windows Server 2022 系统中,你可以使用一些组合命令结合系统自带的工具来实现文件
    在WindowsServer2022系统中,你可以使用一些组合命令结合系统自带的工具来实现文件夹同步。以下是一个示例组合命令,结合Robocopy和TaskScheduler来实现文件夹同步:使用Robocopy进行文件夹同步:Robocopy是Windows自带的一个命令行工具,用于复制大量文件和文件夹。你可......
  • AJAX(Asynchronous JavaScript and XML)是一种用于创建交互式网页应用程序的技术
    AJAX(AsynchronousJavaScriptandXML)是一种用于创建交互式网页应用程序的技术。通过在后台与服务器进行异步通信,实现在不重新加载整个页面的情况下更新部分页面内容。而Spring是一个开源的Java框架,它提供了一种简化Java开发的方式,包括Web应用程序开发。下面是一个使用AJAX......
  • C# 中的Async 和 Await 的用法详解
    C#中的Async和Await的用法详解  众所周知C#提供Async和Await关键字来实现异步编程。在本文中,我们将共同探讨并介绍什么是Async和Await,以及如何在C#中使用Async和Await。同样本文的内容也大多是翻译的,只不过加上了自己的理解进行了相关知识点的补充,如果你认为自己的......
  • 创建与启动线程之二(继承Thread类)(实现Runnable接口)
    1.概述java的JVM允许程序运行多个线程.使用java.lang.Thread来表示线程.一个线程都直接或间接的继承于Thread类,即每个线程的对象要么是Thread的实例,要么是其子类的实例.2.Thread类的特性每个线程都是通过某个特定的Thread对象的run方法来完成操作的,run()被称为线程执行体.......
  • System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3
    VS2022.netCore5.0项目编译没问题,运行时报这个错System.IO.FileNotFoundException:“Couldnotloadfileorassembly'System.Runtime,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'.系统找不到指定的文件。” 我这里遇到这个问题的原因是,v......