网站首页 > 技术文章 正文
概述
c#使用async修饰符来定义一个异步方法实现异步编程
异步方法是异步方法中存在开启一个子线程来异步执行某个过程,这里使用Task来代替。
async:英文的含义是异步的意思
await:期待或者等待的意思,这里理解成等待
aysnc修饰的方法意思是在方法内部创建子线程
定义使用async不用await,代码:
public static void DoTest()
{
Console.WriteLine("序号1:主进程执行");
//执行函数
DoMehotd1();
//主进程停止运行10毫秒
Thread.Sleep(10);
Console.WriteLine("序号5:主进程执行结束");
}
/*
* 使用Asnc 定义一个异步方法
* 在异步方法中,使用Task.Run运行一个线程
*/
public static async void DoMehotd1()
{
Console.WriteLine("序号2:aysnc 方法 1");
Task.Run(() =>
{
//子线程停止运行20毫秒
Thread.Sleep(20);
Console.WriteLine("序号3:子线程执行");
});
Console.WriteLine("序号4:子线程执行");
}
注:如果使用了async,但是在async中的方法中未使用await进行配对使用,方法没有错,但是有警告,提示你使用await.
Task.Run表示是创建并运行一个一个子线程。
使用代码调用DoMethod1这个异步方法代码说明:
(1)主线程阴塞了10秒
(2) DoMethod1使用Task创建了一个线程,并使用Thread.Sleept模拟子线程执行了(阻塞)20毫秒,使之执行的时间大于主线程的执行时间。
(2) 使用async修改的DoMethod1有一个输出序号3,在Task.Run后面 紧跟输出了 序号4
输出结果:
这个输出结果表明了,在未使用await的情况下 子线程会慢于这个方法下的主进程的输出之后。
或者主进程只管执行自己的,分配了一个任务给子线程,随便它什么时候执行完,这里使用Sleep(20)的意思是让他慢于Task.Run后面的输出
使用await与async配对来修饰符代码
输出结果:
注:
在async修饰的方法内部,如果使用await修饰于Task(或者说是线程)的执行,它会等待子线程执行完成后 再执行其他逻辑
而async整体方法,也会在异步于主进程的。就是说在async修饰的方法DoMethod1,对于DoTest来说他不管DoMethod1有没有执行完,他只管进行他的进程。
从上图看出来,DoTest的序号5 在线程执行完成前先执行完成了。
猜你喜欢
- 2024-09-11 C# (Winform)实现USB HID自定义接口操作(控制下位机,如STM32)
- 2024-09-11 Tcp服务端一直sleep,客户端不断发送数据产生的问题
- 2024-09-11 C#中的进程与线程及其并发编程(c#多线程并发处理)
- 2024-09-11 在服务中默默地执行C#业务代码(在服务中默默地执行c#业务代码)
- 2024-09-11 C#中AutoResetEvent和ManualResetEvent使用场景
- 2024-09-11 C# AutoResetEvent 和 ManualResetEvent 在 WinForms 应用中的使用
- 2024-09-11 C#基础 DateTime详解(c# datetime.date)
- 2024-09-11 C# 面向对象 静态类和静态成员(c# 静态方法和实例方法)
- 2024-09-11 C#编程中如何使用线程(c#线程是什么)
- 2024-09-11 一篇文章搞懂C#中的接口(c#中接口怎么使用)
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 1522℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 649℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 527℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 461℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 460℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)