C# 中await和async的用法(一)

news/2025/1/9 15:50:28 标签: c#, 开发语言

在 C# 中,await 关键字用于异步编程,配合 async 方法一起使用。await 允许你等待异步操作完成,而不会阻塞当前线程。简而言之,await 会暂停当前方法的执行,直到任务完成,然后继续执行。

1. await与async的关系

asyncasync关键字是一个函数修饰符,用于表示这个方法是一个异步方法,但并不绝对。

Async方法在执行的时候,开始是以同步的方式执行(即在调用方的thread里跑的),直到遇到await关键字,从await关键字开始,C#会另起一个thread来执行await后面的代码。

C#新起的这个thread,会等待await的方法执行,在执行结束前,一直处于阻塞状态。

而调用方的thread(一般是主线程)会继续运行,可以处理UI等操作。

如果Async方法里面的代码没有包含await的代码会怎么样?

那整个函数就会同步执行,跟普通函数没差别。编译器只会给你个警告。

当一个方法被标记为async时,它返回一个Task对象,而不是直接返回结果。

举例:

        private async Task<bool> Fun1()
        {
            int num = 2;
            await FunSub(num); // 使用异步方法代替阻塞方法
            return true;
        }

在上面的例子中,在async异步函数里,搭配await使用,实现异步功能。

如果没有await指令,这个异步函数将以同步方式运行,不会自动新建线程。

await:await关键字是一个方法修饰符,用于在一个函数内部等待一个Task或async方法完成。

await 后面的方法不能是同步方法,否则会报错。

当在async方法中使用await时,它会暂停当前方法的执行,直到等待的Task完成。

一旦Task完成,这个async方法才会继续执行后续的代码。

当async方法暂停期间,由于和主线程是独立的,只是这个子线程在等待,主线程继续执行,该干啥干啥。

举例:

        private async Task<bool> FunSub(int Num)
        {
            await Task.Delay(Num); // 使用异步方法代替阻塞方法
            return true;
        }

在这个异步方法中,只有当Task延时设定的时间后,才会执行return指令。

2. 异步方法的使用场景

针对比较耗时的操作,通过异步方法可以提高程序的响应性和性能,提高操作的流畅性。

尤其适用于处理IO密集型操作场景,主要是这三类:

a:网络请求

b:文件读写

c:数据库大量数据的交互


http://www.niftyadmin.cn/n/5817686.html

相关文章

Clojure语言的数据库编程

Clojure语言的数据库编程 引言 在当今社会&#xff0c;数据的处理和管理已经成为一个不可或缺的部分。无论是互联网应用、企业系统还是移动应用&#xff0c;都需要与数据库进行频繁的交互。因此&#xff0c;选择一种合适的编程语言和相应的库来进行数据库编程显得尤为重要。C…

易支付二次元网站源码及部署教程

易支付二次元网站源码及部署教程 引言 在当今数字化时代&#xff0c;二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求&#xff0c;搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程&#xf…

左神算法基础巩固--2

文章目录 稳定性选择排序冒泡排序插入排序归并排序快速排序堆排序 哈希表链表解题 稳定性 稳定性是指算法在排序过程中保持相等元素之间相对顺序的特性。具体来说&#xff0c;如果一个排序算法是稳定的&#xff0c;那么对于任意两个相等的元素&#xff0c;在排序前它们的相对顺…

leetcode 458. 可怜的小猪

题目&#xff1a;458. 可怜的小猪 - 力扣&#xff08;LeetCode&#xff09; 数学问题。 尝试次数 times minutesToTest / minutesToDie 每只猪可以承载的数据量 bit times 1 答案 ret 就是 bit ^ ret > buckets 时&#xff0c;ret 的最小值。 特殊的&#xff0c;注意…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

10. C语言 函数详解

本章目录: 前言1. C 语言函数概述1.1 函数的定义与结构1.2 函数声明1.3 函数调用 2. 函数参数传递2.1 传值调用2.2 传引用调用&#xff08;模拟&#xff09;2.3 引用调用&#xff08;C 特性&#xff09; 3. 内部函数与外部函数3.1 内部函数3.2 外部函数3.3 示例&#xff1a;多个…

TensorRT-LLM中的MoE并行推理

2种并行方式&#xff1a; moe_tp_size&#xff1a;按照维度切分&#xff0c;每个GPU拥有所有Expert的一部分权重。 moe_ep_size: 按照Expert切分&#xff0c;每个GPU有用一部分Expert的所有权重。 二者可以搭配一起使用。 限制&#xff1a;二者的乘积&#xff0c;必须等于模…

腾讯云AI代码助手编程挑战赛-古诗词学习

一、作品介绍 在科技与文化深度交融的当下&#xff0c;“腾讯云 AI 代码助手编程挑战赛 - 每日古诗词” 宛如一颗璀璨的新星&#xff0c;闪耀登场。它绝非一场普通的赛事&#xff0c;而是一座连接编程智慧与古典诗词韵味的桥梁。 这项挑战赛以独特的视角&#xff0c;将每日古…