首页 > 编程语言 >C#异步编程概念和使用

C#异步编程概念和使用

时间:2023-05-26 18:14:03浏览次数:50  
标签:异步 await C# 编程 任务 main

异步编程要搞懂3个概念async、Task、await;

async修饰符指明方法为异步方法;

Task是异步方法返回类型;

await是运算符,用来等待异步方法完成;

当在异步方法中调用异步方法(理解为启动任务),可以在合适的时机等待任务完成,然后再使用返回的结果,这就是异步编程的优势,可以在一个过程中执行多个任务,在需要任务结果时再等待获取结果;

需要理解的时启动一个任务并不是立即就开始下一个任务,而是第一个任务需要等待时才会就控制权交还给调用方,调用方才能继续下面的过程,如下图所示

main开启任务DownloadDocsMainPageAsync,DownloadDocsMainPageAsync执行过程到await,然后将控制权交还给main,然后mian继续执行,如果main又有其他任务,则就又可以开启新的任务。

也就是在一个过程中调用多个异步方法时,异步才真正发挥作用,可以使用System.Threading.Tasks相关类型用于处理Task,比如 WhenAllWhenAny,具体例子看官方文档(异步做饭节省时间):

Asynchronous programming in C# | Microsoft Learn

 

标签:异步,await,C#,编程,任务,main
From: https://www.cnblogs.com/lumingprince/p/17435469.html

相关文章

  • python操作mysql数据pymysql-执行语句select查询返回值直接返回dict字典类型或者list
    一、返回tuple元组类型(默认)fetchall()将结果放在二维数组里面,每一行的结果在元组里面importpymysqldefexport(table_name):conn=pymysql.connect(host='118.24.3.40',user='jxz',password='123456',db......
  • Docker 镜像减少体积的思路和方法
    Docker镜像减少体积的思路和方法背景有一个项目感觉镜像有点大这边同事喊着一起帮忙处理一下.今天基本上就在客户现场进行处理了.想着应该把自己想到的东西整理一下.整体思路1.清理dockerfile同级目录内的文件,仅保留必须文件dockerbuild时会进行sendfile的......
  • pycharm打开项目乱码解决方案
    常见乱码情况:控制台,左侧项目名称或程序中包含中文,展示乱码,一般产生的原因为编码格式不同导致的乱码,可以通过以下步骤设置。方法一:通过“File”->“FileEncoding”,设置“ProjectEncoding”为UTF-8方法二:如果是新增文件乱码,则可以在文件第一行设置编码格式#coding:gbk方法三:上......
  • Simple Factory Pattern 简单工厂模式简介与 C# 示例【创建型】【设计模式来了】
     〇、简介1、什么是简单工厂模式?一句话解释:  客户类和工厂类严格分工,客户类只需知道怎么用,处理逻辑交给工厂类。简单工厂模式(SimpleFactoryPattern)是日常开发中常用的设计模式。其是一种简单的创建型模式,它通过一个工厂类来创建对象,客户端只需要知道如何使用工厂类,而不需......
  • 一文教会你用Apache SeaTunnel Zeta离线把数据从MySQL同步到StarRocks
    在上一篇文章中,我们介绍了如何下载安装部署SeaTunnelZeta服务(3分钟部署SeaTunnelZeta单节点Standalone模式环境),接下来我们介绍一下SeaTunnel支持的第一个同步场景:离线批量同步。顾名思意,离线批量同步需要用户定义好SeaTunnelJobConfig,选择批处理模式,作业启动后开始同步数据,当......
  • python flask 启动报错 'utf-8' codec can't decode byte 0xb2 in position 4: invali
    原因:在python下lib文件夹里的socket.py文件中的name=gethostname()代码执行获取本机电脑名称时,遇到中文导致乱码报错。解决方法:    1.将电脑“设备名称”中中文改为英文;    2.修改socket.py代码,如下(参考https://blog.csdn.net/weixin_46342884/article/detail......
  • 使用 PostMessage 函数来发送带有 std::vector 作为参数的消息
    使用PostMessage函数来发送带有std::vector作为参数的消息,您可以将std::vector的地址封装进LPARAM类型的指针中,并将其传递给PostMessage函数的lParam参数。在接收方,您需要使用reinterpret_cast将LPARAM转换回std::vector的指针,然后使用它来访问std::vector。下......
  • 2023.5.26编程一小时打卡
    一、问题描述:定义复数类MyComplex,主函数完成相关测试。MyComplex类结构说明:1、数据成员包括:私有数据成员:实部x(double)虚部y(double)。2、成员函数包括:无参构造函数MyComplex(void),其功能是将数据成员数部和虚部的值均设为0;有参构造函数MyComplex(doublevalue1,doublevalue2),其功能......
  • discoDSP Vertigo for Mac(声音合成插件) v4.4S中文版
    通过加法合成发现声音设计的无限可能性,加法合成是一种通过将两个或多个音频信号相加而产生新声音的合成。VertigoAdditiveSynthesizer提供了一系列功能来增强您的创作潜力,包括256个振荡器,双滤波器和8种易于操作和修改的效果。discoDSPVertigo中文版插件功能特色我们的合成器......
  • IPQ8072 or IPQ8072A with the QCN9074/9024 chipset / well-suited for high-end rou
    TheIPQ8072andIPQ8072AarebothpowerfulnetworkingSoCs(System-on-Chip)designedbyQualcommforhigh-performancerouters,enterpriseWi-Fiaccesspoints,andothernetworkingequipment.ThesechipsarepartofQualcomm'sNetworkingProseriesan......