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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值