关于C#中的async/await的理解

1. 使用async标记的方法被认为是一个异步方法,如果不使用await关键字,调用跟普通方法没有区别

 static async Task Main(string[] args)
 {
     Console.WriteLine("主线程id:" + Thread.CurrentThread.ManagedThreadId);

     TestAwait();

     Console.WriteLine("主线程id:" + Thread.CurrentThread.ManagedThreadId);
}

private static async Task TestAwait()
{
    Console.WriteLine("执行线程id:" + Thread.CurrentThread.ManagedThreadId);

    Thread.Sleep(2000);  //模拟耗时操作

    Console.WriteLine("执行完线程id:" + Thread.CurrentThread.ManagedThreadId);
}

执行结果:

2.当使用await关键字时,异步方法会暂时挂起,让出当前线程的控制权,而不会阻塞线程。当被await的异步操作完成后,异步方法会恢复执行,并返回结果。

            在大多数情况下,异步操作并不会创建新的线程,而是通过利用I/O完成端口或其他异步机制来实现异步操作。这样可以避免创建额外的线程,提高程序的性能和资源利用率。
 

 static async Task Main(string[] args)
 {
     Console.WriteLine("主线程id:" + Thread.CurrentThread.ManagedThreadId);

     TestAwait();

     Console.WriteLine("主线程id:" + Thread.CurrentThread.ManagedThreadId);
    
     Console.WriteLine("Hello, World!");

     Console.ReadLine();

}

private static async Task TestAwait()
{
    Console.WriteLine("执行线程id:" + Thread.CurrentThread.ManagedThreadId);

    await Task.Delay(2000);

    Console.WriteLine("执行完线程id:" + Thread.CurrentThread.ManagedThreadId);
}

3.使用task.result获取执行结果,会阻塞调用线程

 static async Task Main(string[] args)
 {
     Console.WriteLine("主线程id:" + Thread.CurrentThread.ManagedThreadId);

     int a = TestAwait().Result;

     Console.WriteLine("主线程id:" + Thread.CurrentThread.ManagedThreadId);
    
     Console.WriteLine("Hello, World!");

     Console.ReadLine();

}

private static async Task<int> TestAwait()
{
    Console.WriteLine("执行线程id:" + Thread.CurrentThread.ManagedThreadId);

    await Task.Delay(2000);

    Console.WriteLine("执行完线程id:" + Thread.CurrentThread.ManagedThreadId);

    return 1;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

表的增删改查CURD(一)

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;MySql&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 新增&#xff08;Create&#xff09; 全列插入 指定列…

docker使用nginx部署vue刷新页面404

docker使用nginx部署vue刷新页面404 从docker内部复制出来的配置文件是这样的&#xff0c;但是刷新页面之后就显示404&#xff0c;关键是我两个前端项目都是用的这一个配置文件&#xff0c;但是只有一个项目出现刷新浏览器显示404的问题&#xff0c;这给我搞懵了&#xff01;&…

一些面试会问到的奇怪问题与面试总结

1.v-for、v-if先后顺序。 官方不建议一起使用&#xff0c;但是有时候面试的时候会问到。 在vue2中是v-for先与v-if的。 源码js编译结果&#xff1a; _c()就是vm.$createElement()&#xff0c;意思是创建一个虚拟的element&#xff0c;就是返回值是VNode。 _l就是renderlist…

关于java创建对象内存分析

关于java创建对象内存分析 我们在前面的文章中&#xff0c;了解了类和对象&#xff0c;以及创建对象&#xff0c;给对象赋值等&#xff0c;我们本篇文章来进一步了解一下创建对象的时候&#xff0c;堆和栈的情况&#xff0c;以及对内存的分析&#x1f600; 1、创建一个类 我…

虚拟机连接(与主机断开连接)U盘的按钮为灰色之解决方法

在WIN11中&#xff0c;虚拟机“连接(与主机断开连接)U盘”选项为灰色&#xff0c;解决方法如下&#xff1a; 1、关闭虚拟机电源&#xff0c;得到下面的界面&#xff1a; 2、根据上述提示&#xff0c;找到虚拟机所在磁盘 3、配置文件属性见下图&#xff1a; 4、使用记事本打开…

【深度学习:Synthetic Training Data 】合成训练数据简介

【深度学习&#xff1a;Synthetic Training Data 】合成训练数据简介 计算机视觉模型的视频标签视频注释与图像注释‍Data 数据‍Annotation process ‍标注流程‍Accuracy 准确性 ‍注释视频的优点易于数据收集时间背景实用功能 视频注释用例自动驾驶汽车姿态估计交通监控医学…

Python源码26:海龟画图turtle画向日葵

---------------turtle源码集合--------------- Python教程43&#xff1a;海龟画图turtle画小樱魔法阵 Python教程42&#xff1a;海龟画图turtle画海绵宝宝 Python教程41&#xff1a;海龟画图turtle画蜡笔小新 Python教程40&#xff1a;使用turtle画一只杰瑞 Python教程39…

KT148A语音芯片智能锁扩展语音地址以及如何支持大量小文件的打包

一、语音芯片应用于智能锁的需求 智能锁的语音播放需求中&#xff0c;有很多需要多国语言合并在一起的需求 其中语音文件数多&#xff0c;并且每个语音文件小的特点 如果使用OTP的语音芯片&#xff0c;就很麻烦&#xff0c;因为用户不可烧录&#xff0c;调试也很繁琐 同时大…

Java 开源扫雷游戏 JMine 发布新版 3.0 及介绍视频

Java 开源扫雷游戏 JMine 发布新版 3.0 及介绍视频 Java 开源扫雷游戏 JMine 是笔者开发的基于 Swing 的 Java 扫雷游戏&#xff0c;现已发布新版 3.0 及其介绍视频。视频请见&#xff1a; https://www.bilibili.com/video/BV1RK4y1z7Qz/ 老版本 JMine 1.2.5 的介绍视频请见…

跨越数字化鸿沟:企业转型的领导力与执行力,数字化转型浪潮下创新、变革与持续发展

在数字化转型的浪潮下&#xff0c;企业面临着巨大的机遇与挑战。如何成功跨越数字化鸿沟&#xff0c;实现转型发展&#xff0c;是企业领导者必须深思的问题。领导力、执行力与创新、变革、持续发展之间的关系成为关键。本文将深入探讨这些因素如何共同作用&#xff0c;帮助企业…

GZ075 云计算应用赛题第10套

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenS…

[java数据结构] ArrayList和LinkedList介绍与使用

目录 (一) 线性表 (二) ArrayList 1. ArrayList的介绍 2. ArrayList的常见方法和使用 3. ArrayList的遍历 4. ArrayList的模拟实现 5. ArrayList的优缺点 (三) LinkedList 1. LinkedList的介绍 2. LinkedList的常见方法和使用 3. LinkedList的遍历 4. LinkedList的…

上门按摩APP系统公众号H5搭建能为客户带来哪些便捷。

大家好&#xff01;今天我来给大家介绍一下上门按摩系统H5搭建。你有没有曾经因为工作疲劳、肌肉酸痛而感到身体不适&#xff1f;或者是因为长时间坐在电脑前&#xff0c;感觉脖子和肩膀快要僵硬了&#xff1f;如果你有这样的困扰&#xff0c;那么上门按摩系统公众号绝对是你的…

黑马程序员——javase基础——day01——Java入门IDEA基础语法

目录&#xff1a; Java入门 Java简介JDK的下载和安装第一个程序常见问题常用DOS命令Path环境变量IDEA IDEA概述和安装IDEA中HelloWorldIDEA中基本配置&注释IDEA中常用快捷键IDEA中模块操作基础语法 字面量数据类型变量变量的案例 手机信息描述疫情防控信息采集表变量的注意…

linux云服务器 如何将数据盘挂载到系统盘上面?

先认识认识下面几个常用命令 lsblk 命令&#xff1a;查看设备列表&#xff0c;也就是能看到系统盘和数据盘一般为&#xff1a;vda&#xff08;系统盘&#xff09;、vdb&#xff08;数据盘&#xff09;等等 lsblk"ls" 是 "list" 的缩写&#xff1a; lsblk…

29K star!关于shell,你需要的都在这里

Awesome 是GitHub上一个神奇的单词&#xff0c;搜索Awesome可以发现非常多精彩的汇总性项目&#xff0c;涉及到各种方面&#xff0c;而且star都非常多。 今天我们推荐的开源项目帮你整理了玩转shell所需的一切&#xff0c;本项目目前在GitHub已超过29K Star&#xff0c;它就是…

Go后端开发 -- 数组 slice map range

Go后端开发 – 数组 && slice && map && range 文章目录 Go后端开发 -- 数组 && slice && map && range一、数组1.数组的声明和初始化2.数组的传参 二、slice切片1.slice的定义和初始化2.len()和cap()函数3.空切片4.切片截取5…

新书速览|数据科学技术:文本分析和知识图谱

百分科技书解数据科学&#xff0c;文本分析、知识图谱详解&#xff0c;实战案例呈现&#xff0c;助你深入理解技术原理&#xff0c;行业应用启发&#xff0c;助力创新发展。 本书内容 数据科学的关键技术包括数据存储计算、数据治理、结构化数据分析、语音分析、视觉分析、文本…

牛客周赛 Round 5 解题报告 | 珂学家 | 思维场

前言 剑&#xff0c;和茶一样&#xff0c;只有细细品味&#xff0c;才能理解它的风雅。 整体评价 挺难的一场比赛&#xff0c;C题差点点错科技树(想着用Dsu On Tree), D题开始上难度&#xff0c;但是只是分析其实就是一个区间求交集的脑筋急转弯&#xff0c;E题盲猜是菊花图。…

Ansys Zemax | 如何使用光学制造全息图修正像差

附件下载 联系工作人员获取附件 本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后&#xff0c;本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量&#xff0c;以实现衍射受限单透镜…