C#异步编程是怎么回事

首先以一个例子开始

image

我说明一下这个例子。
这是一个演示异步编程的例子。

  • 输入job [name],在一个同步的Main方法中,以一发即忘的方式调用异步方法StartJob()
  • 输入time,调用同步方法PrintCurrentTime()输出时间。
  • 输出都带上线程ID,便于观察。
    可以看到,主线程不会阻塞。主线程在同步方法中使用一发即忘的方式调用异步方法时,在异步方法中碰到阻塞时,主线程返回同步方法中继续执行。而异步方法在另一个线程中继续执行。
    程序如下
internal class Program
{static void Main(string[] args){while (true){Console.WriteLine($"(Thread ID: {Thread.CurrentThread.ManagedThreadId}) Enter 'time' to get current time or 'job [name]' to start a job:");string input = Console.ReadLine();if (input.StartsWith("time")){// 输出当前时间PrintCurrentTime();}else if (input.StartsWith("job")){// 启动一个异步任务,执行指定的工作string[] parts = input.Split(new char[] { ' ' }, 2);string jobName = parts.Length > 1 ? parts[1] : string.Empty;StartJob(jobName);}else{Console.WriteLine("Invalid input. Please try again.");}}}static void PrintCurrentTime(){Console.WriteLine($"(Thread ID: {Thread.CurrentThread.ManagedThreadId}) Current time: {DateTime.Now}");}static async void StartJob(string jobName){// 获取主线程的线程 IDint mainThreadId = Thread.CurrentThread.ManagedThreadId;// 检查是否在主线程上bool onMainThread = Thread.CurrentThread.ManagedThreadId == mainThreadId;Console.WriteLine($"(Thread ID: {Thread.CurrentThread.ManagedThreadId}) Starting job '{jobName}'. This will take 10 seconds...");// 输出主线程上下文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RunMe_About PreparationForDellBiosWUTTest

:: ***************************************************************************************************************************************************************** :: 20240613 :: 该脚本可以用作BIOS WU测试前的准备工作,包括:自动检测"C:\DellB…

关于自学编程的9点忠告

打牢基础,精通一门语言。没有最好的语言,只有特定场景下更合适的语言。例如java开发安卓\大数据,php开发web ,python人工智能, go语言做区块链… 不同的编程有大量内容都是重复的,例如类与对象的思想,无论在…

深度探索:智能家居背后的科技力量与伦理思考

目录 科技力量:创新驱动下的智慧生活引擎 1. 人工智能与机器学习 2. 物联网技术 3. 大数据分析 4. 5G与边缘计算 伦理与隐私:智能家居的双刃剑 1. 隐私侵犯风险 2. 数据安全挑战 3. 算法偏见与决策透明度 应对策略:构建安全、负责任的智能…

Vision-LSTM: xLSTM 作为通用视觉主干

摘要 尽管Transformer最初是为自然语言处理引入的,但它现在已经被广泛用作计算机视觉中的通用主干结构。最近,长短期记忆(LSTM)已被扩展为一种可扩展且性能优越的架构——xLSTM,它通过指数门控和可并行化的矩阵内存结…

综合数据分析及可视化实战

【实验目的】 1、掌握数据分析常用的几种扩展库: numpy、pandas、matplotlib。 2、理解数据分析的几种方法,即描述性数据分析,探索性数据分析 和验证性数据分析。 3、理解数据分析的基本步骤:数据准备、数据导入、数据预处理、数 据分析和数据可视化…

机器学习笔记 - 用于3D数据分类、分割的Point Net的网络实现

上一篇,我们大致了解了Point Net的原理,这里我们要进行一下实现。 机器学习笔记 - 用于3D数据分类、分割的Point Net简述-CSDN博客文章浏览阅读3次。在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transforme…

【MySQL】MySQL45讲-读书笔记

1、基础架构:一条SQL查询语句是如何执行的? 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 mysql -h$ip -P$port -u$user -p输完命令之后,输入密码。 1.2 查询缓存 MySQL 拿到一个查询请求后,会先到查询缓…

透明屏幕的显示效果如何

透明屏幕的显示效果可以从以下几个方面进行评估和描述: 透明度:透明屏幕的透光率通常在50-90%左右,具体取决于屏幕的设计和用途。这种高透明度使得屏幕在不用时可以像普通玻璃一样透明,保持视野的清晰。 色彩表现:透明…

PDF格式分析(八十六)——修订注释(Redaction)

修订注释(PDF 1.7及其以上版本),该注释的做用是标识要从文档中删除的内容。 修订注释启用的步骤如下: 1、内容标识。PDF编辑器可指定应删除的文档内容片段或区域,在执行下一个步骤前,用户可以看到、移动和重新定义这些注释。 2、内容移除。PDF阅读器应删除修订注释指…

SAP MMRV/MMPV 物料账期月结月底月初开关

公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎&#xff1…

######## golang各章节终篇索引 ########

slice、map #### golang 切片及append操作 ####_golang切片线程 append 和下表操作-CSDN博客 #### go map 底层结构(详细) ####-CSDN博客 并发安全问题、syncmap ###### golang sync.map 原理和使用 ######_go sync.map删除原理-CSDN博客 #### 并发读…

spring 常用注解

Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用 构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境 中。 Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。 Se…

多商家抽奖管理系统介绍和小程序APP演示

阿基米德多商家抽奖管理系统,采用Thinkphp8.0vue3.0uniapp技术栈开发,前后端分离,客户端支持小程序、H5、APP一键打包,功能完善、成熟稳定,使用简单易上手,是一套可以直接商业化运营的好系统,其…

JavaScript快速入门系列-2(JavaScript语言基础)

第二章:JavaScript语言基础 2.1 变量声明:let, const, var2.1.1 变量是什么?2.1.2 var2.1.3 let与const2.1.4 选择哪个关键字? 2.2 数据类型2.2.1 基本数据类型2.2.2 复杂数据类型2.2.3 示例与类型检测 2.3 运算符2.3.1 算术运算符…

CATIA P3 V5-6R 中文版软件下载安装 达索CATIA三维设计软件获取

CATIA的建模和装配能力堪称业界翘楚。其强大的建模工具能够轻松应对各种复杂的几何形状和结构,帮助设计师们快速构建出精准的产品模型。同时,装配模块则能够实现零部件的快速装配,大大提高了设计效率。 在分析和仿真方面,CATIA同样…

代码随想录算法训练营第八天| 344. 反转字符串|541. 反转字符串 II

344. 反转字符串 文档讲解:代码随想录 视频讲解:字符串基础操作! | LeetCode:344.反转字符串_哔哩哔哩_bilibili 1. 感觉需要用到指针,但不知道咋做。 2. 倒序就是一个交换left,right指针对应指针值的过程。 3. 纠结…

tkinter文本对齐方式

tkinter文本对齐方式 文本对齐方式效果代码 文本对齐方式 左对齐(left):默认对齐方式,文本从左边界开始。右对齐(right):文本从右边界开始。居中对齐(center)&#xff1…

IO多路复用简介和代码实例(select函数)

接上篇 阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介-CSDN博客文章浏览阅读95次。阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介https://blog.csdn.net/CSDN_DU666666/article/details/139598410?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%2…

JS中find的用法

在JavaScript中,Array.prototype.find() 是一个数组方法,用于测试数组中的每个元素是否通过由提供的函数实现的测试。一旦找到一个满足条件的元素,该方法会立即返回该元素的值。如果找不到任何元素满足提供的测试函数,则返回undef…

maven引入依赖时莫名报错

一般跟依赖的版本无关,会报出 Cannot resolve xxx 的错误。 这种情况下去IDEA的setting中找maven的仓库位置 在仓库中顺着包路径下寻找,可能会找到.lastUpdated 的文件,这样的文件一般是下载失败了,而且在一段时间内不再下载&…