C#中的同步编程和异步编程

1. 简单描述一下同步编程和异步编程

  • 同步编程:按照代码的顺序一行一行执行,如果某个操作需要等待(比如读取文件、网络请求、数据库操作等),那么当前的线程就会停下来,一直到这个操作完成了之后,再继续往下执行。
  • 异步编程:在线程等待耗时操作的同时可以继续执行其他的任务。
  • 缺点:
    • 同步编程优:
      • 优点:比较简单,
      • 缺点:但是在处理耗时操作时会阻塞当前线程,效率比较低,会导致程序或用户界面响应缓慢。在多线程环境下,容易发生死锁的问题。
    • 异步编程:
      • 优点:等待耗时操作时不会阻塞线程,提高程序的响应性。简化了编程的复杂性,因为使用 asyncawait 这样的关键字,让代码看起来和同步代码一样简单。如果为了耗时操作新开一个线程,这样就复杂多了。
      • 缺点:异步代码调试起来可能会难一些,因为异步代码的执行顺序可能不是一行一行按顺序来的。

2. 代码演示简单的同步编程和异步编程的区别

  • 程序描述:
    • 首先我添加了一个定时器,在界面上实时显示当前的时间,目的是通过时间是否变化来判断UI界面是否被卡死(程序被阻塞);
    • 然后点击第一个按钮会发现,UI界面确实被卡死了,在 Thread.Sleep(3000) 这三秒期间,界面无法点动,时间也静止了。直到 3 秒过后,才执行到下一句话。
    • 第二个按钮按下,时间继续流动,UI界面也不会卡死,搭配 await 的使用同样可以大道这样的目的:3 秒钟之后,再执行下一句话。
      在这里插入图片描述
  • 代码展示:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace AsyncTest
{public partial class Form1 : Form{AsyncClass ac = new AsyncClass();public Form1(){InitializeComponent();timer1.Start();}private void buttonSync_Click(object sender, EventArgs e){Thread.Sleep(3000);labelnfo.Text = "Sync Done!";}private async void buttonAsync_Click(object sender, EventArgs e){await Task.Delay(3000);labelnfo.Text = "Async Done!";await ac.AsyncMethod1();labelnfo.Text = "1 is Done!";string str = await ac.AsyncMethod2();labelnfo.Text = str;}private void timer1_Tick(object sender, EventArgs e){DateTime time = DateTime.Now;textBoxTime.Text = time.ToString();}}public partial class AsyncClass{public async Task AsyncMethod1(){await Task.Delay(3000);return;}public async Task<string> AsyncMethod2(){await Task.Delay(3000);return "2 is done!";}}
}

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

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

相关文章

洛谷P1064金明的预算方案题解

题目传送门 思路 购买附件是一定要购买主件&#xff0c;并且附件最多有两个&#xff0c;所以一个主件搭配附件的方法只有四种&#xff08;选第一个&#xff0c;选第二个&#xff0c;都选&#xff0c;不选&#xff09;。所以我们在dp时只考虑主件&#xff0c;枚举这四种方案。…

git学习(一)

一、代码仓库的初始化 1、先在本地操作&#xff0c;不涉及到远程服务器&#xff0c;创建目录mkdir git demo 想要本地创建的目录成为一个远程仓库就需要初始化git init git init 后会发生什么&#xff1f; 2、watch -n 1 -d tind每隔1s打印当前文件目录并且刷新 左边命令 wa…

搞DDR,你是可以看看我的这篇笔记(三)

关于DDR PHY这个部分,是数模混合器件,工作涉及到了很多信号完整性,眼图,模拟等相关的东西我就没讲了。因为确实不太熟悉,只能站在架构、功能、使用上去聊聊。 上一篇我们看了这个图片,简化就是下面这个样子: 其实这个也不太合适~~~ 这样舒服多了,一般DDRC和DDRPHTY都会…

基于机器学习的股票预测及股票推荐系统的设计与实现

基于机器学习的股票预测及股票推荐系统的设计与实现 Design and Implementation of a Machine Learning-based Stock Prediction and Stock Recommendation System 完整下载链接:基于机器学习的股票预测及股票推荐系统的设计与实现 文章目录 基于机器学习的股票预测及股票推荐…

被工信部认可的开源软件治理解决方案

近日&#xff0c;工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”&#xff0c;开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选&#xff0c;成为经工信部认可的优秀解决方案&#xff0c;这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

17.延迟队列

介绍 延迟队列&#xff0c;队列内部是有序的&#xff0c;延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中&#xff0c;消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺&#xff0c;如果十天内没…

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类&#xff0c;由 Spring 官方提供的方便操作 Redis 数据库的一个工具类&#xff0c;来源于 org.springframe…

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天&#xff08;chat completion&#xff09; 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

涉密移动载体智能柜管控系统DW-S404|国产自主可控

东识移动载体管控系统载体柜系统采用RFID识别技术&#xff0c;结合智能载体管理软件&#xff0c;实现了文件载体权限管理、定位管理、智能存取、智能盘点、在线监控等功能&#xff0c;同时对文件载体进行规范化、智能化、自动化管理。工作人员通过授权进行文件、载体、卷宗等存…

C# 简单的单元测试

文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果&#xff0c;通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试&#xf…

Windows 下的sqlserver数据拷贝到linux

SSH打开linux终端 1.启动 sqlcmd。 下面的示例以 SA 用户身份连接到本地 SQL Server。 出现提示时输入密码&#xff0c;或使用 -P 参数指定密码。 sqlcmd -S localhost -U sa 2.在 >1 提示符下&#xff0c;输入以下 RESTORE DATABASE 命令&#xff0c;并在每行后按 Enter&…

这一文,关于 Java 泛型的点点滴滴 一(泛型基础、类型擦除)

作为一个 Java 程序员&#xff0c;用到泛型最多的&#xff0c;我估计应该就是这一行代码&#xff1a; List<String> list new ArrayList<>();这也是所有 Java 程序员的泛型之路开始的地方啊。 不过本文讲泛型&#xff0c;先不从这里开始讲&#xff0c;而是再往前…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…

第14章 Express性能优化

性能优化是确保 Express 应用在高并发环境下能够高效运行的重要环节。优化得当可以显著提升应用的响应速度和稳定性。本章将详细介绍 Express 应用的各种性能优化方法和技巧。 缓存策略 缓存是提升应用性能的常用手段。它通过存储频繁访问的数据&#xff0c;减少数据库查询和计…

dpdk编译安装以及接收udp报文(基于ubuntu)

目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载&#xff1a; DPDK 下载版本&#xff1a;DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…

Python 教程(五):理解条件语句和循环结构

目录 专栏列表前言条件语句if 语句elif 语句else 语句示例 循环结构for 循环while 循环break 和 continue实例演示 循环控制语句range 函数enumerate 函数 模式匹配总结 在前四篇教程中&#xff0c;我们学习了 Python 的基本语法和数据结构。本篇教程&#xff0c;我们将深入探讨…

lua 游戏架构 之 游戏 AI (八)ai_tbl 行为和优先级

定义一系列的AI行为类型和它们的优先级&#xff0c;以及一个映射表ai_tbl来关联每种AI行为类型与对应的脚本文件和优先级。以下是对代码的详细解释&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客https://blog.csdn.net/heyuchang666/artic…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

【全国大学生电子设计竞赛】2022年A题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

大厂面试:小红书大数据面试题及参考答案(3万字长文)

目录 Hadoop 和 Spark 的区别和优劣 Spark Shuffle 原理,Hash Shuffle 和 Sort Shuffle 线程池,阻塞队列有界无界,救急线程 JVM 内存模型 栈溢出的场景和应对方法 方法区是否能溢出,如果溢出的话储存的那些类信息怎么办 MySQL 索引设计原则 当数据量很大时,count(…