C#的await常用和扩展方法

news/2024/6/16 10:30:40/文章来源:https://blog.csdn.net/zuiyuewentian/article/details/137222229

awaitC# 中用于等待异步操作完成的关键字。它通常与 async 一起使用,用于异步方法中等待异步操作的完成,并且在异步操作完成后,恢复执行该方法。

下面是对 await 的详细介绍以及一些示例代码:
1. 基本用法:
await 关键字用于等待一个返回 TaskTask<T> 对象的异步方法完成。当异步操作完成后,await 表达式返回其结果(如果有的话)。

async Task MyAsyncMethod()
{// 异步操作,例如 Task.Delayawait Task.Delay(1000);Console.WriteLine("异步操作完成");
}

2. 等待 Task 完成:

async Task<int> MyAsyncMethod()
{await Task.Delay(1000);return 42;
}async Task Main()
{int result = await MyAsyncMethod();Console.WriteLine($"异步操作的结果为:{result}");
}

3. 等待多个任务完成:
Task.WhenAll 方法可以等待多个任务全部完成。

async Task Main()
{Task<int> task1 = MyAsyncMethod1();Task<int> task2 = MyAsyncMethod2();await Task.WhenAll(task1, task2);Console.WriteLine($"task1 的结果为:{task1.Result}");Console.WriteLine($"task2 的结果为:{task2.Result}");
}

4. 等待任意一个任务完成:
Task.WhenAny 方法可以等待多个任务中的任意一个完成。

async Task Main()
{Task<int> task1 = MyAsyncMethod1();Task<int> task2 = MyAsyncMethod2();Task<int> completedTask = await Task.WhenAny(task1, task2);Console.WriteLine($"第一个完成的任务结果为:{completedTask.Result}");
}

5. 异常处理:
try-catch 块中使用 await 来捕获异步操作中的异常。

async Task Main()
{try{await MyAsyncMethod();}catch (Exception ex){Console.WriteLine($"异步操作出现异常:{ex.Message}");}
}

6. 取消异步操作:
使用 CancellationTokenTask.Delay 结合,可以实现异步操作的取消。

async Task MyAsyncMethod(CancellationToken cancellationToken)
{await Task.Delay(1000, cancellationToken);Console.WriteLine("异步操作完成");
}async Task Main()
{using (var cancellationTokenSource = new CancellationTokenSource()){// 设置 500ms 后取消操作cancellationTokenSource.CancelAfter(500);try{await MyAsyncMethod(cancellationTokenSource.Token);}catch (TaskCanceledException){Console.WriteLine("异步操作被取消");}}
}

await 关键字的作用是将异步操作的等待转换为对异步结果的处理,使得异步编程更加简洁和可读。

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

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

相关文章

双按键IP对讲终端SV-6002D功能简介

ip语音双向对讲系统高速路求助对讲终端 IP对讲终端SV-6002D双按键是一款采用了ARMDSP架构&#xff0c;接收网络音频流&#xff0c;实时解码播放&#xff1b;配置了麦克风输入和扬声器输出&#xff0c;SV-6002D带两路寻呼按键&#xff0c;可实现对讲、广播等功能&#xff0c;作为…

工艺品wordpress外贸主题

工艺品wordpress外贸主题 简约大气的wordpress外贸主题&#xff0c;适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377

Spring面试常见问题

目录 1、为什么要用Spring框架&#xff1f;2、有了spring为什么又出现了 springboot&#xff1f;3、springboot出现后为什么又出现了spring cloud&#xff1f;4、SpringBoot自动配置&#xff08;重点&#xff09;5、SpringBoot启动流程&#xff08;重点&#xff09;6、简单谈一…

HarmonyOS 应用开发之UIAbility组件基本用法

UIAbility组件的基本用法包括&#xff1a;指定UIAbility的启动页面以及获取UIAbility的上下文 UIAbilityContext。 指定UIAbility的启动页面 应用中的UIAbility在启动过程中&#xff0c;需要指定启动页面&#xff0c;否则应用启动后会因为没有默认加载页面而导致白屏。可以在…

以太网及ARP协议简介

以太网及ARP协议简介 在以太网中&#xff0c;主机间相互通信&#xff0c;必须要知道目的主机的MAC地址&#xff08;物理地址&#xff09;&#xff0c;可以通过ARP协议以目的主机IP地址获取目的主机的MAC地址。 ARP协议简介 ARP&#xff08;Address Resolution Protocol&…

如何同时安全高效管理多个谷歌账号?

您的业务活动需要多个 Gmail 帐户吗&#xff1f;出海畅游&#xff0c;Gmail账号是少不了的工具之一&#xff0c;可以关联到Twitter、Facebook、Youtube、Chatgpt等等平台&#xff0c;可以说是海外网络的“万能锁”。但是大家都知道&#xff0c;以上这些平台注册多账号如果产生关…

蓝桥杯刷题第六天(昨天忘记发了)

今天想从不一样的角度来解题&#xff1a;从时间紧张暴力求解到思路阔达直接通过所有案例 暴力方法&#xff1a; 思路第一眼看到这个问题我就想到了第一个思路就是先用两个数组一个存石子数一个存颜色状态&#xff0c;每次遍历一遍看看有没有相邻石子颜色一样且为和最小的。 im…

nslookup查询网站是否支持IPV6

nslookup是一种网络管理命令行工具&#xff0c;可用于查询DNS域名和IP地址输入指令nslookup默认服务器和Address是当前上网所用的DNS服务器域名和地址A记录A&#xff08;Address&#xff09;记录指的是用来指定主机名或域名对应的IP记录。

27. UE5 RPG同步面板属性(三)

在前两篇中&#xff0c;我们在C中实现了对GameplayTag的创建&#xff0c;并且创建DataAsset存储数据&#xff0c;按照之前的规划&#xff1a; 首先我们需要通过c去实现创建GameplayTag&#xff0c;这样可以在c和UE里同时获取到Tag创建一个DataAsset类&#xff0c;用于设置tag对…

(补充)Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(二)项目实现-第六篇-(高级篇)实现高性能高并发

本章目录&#xff08;接上篇&#xff09; 六、使用MQ对请求做异步削峰处理&#xff0c;解决吞吐量问题1.购票时序图演进2.RocketMQ初体验1.下载2.启动NameServer和Broker3.测试消息收发 3.RocketMQ控制台的使用4.**使用RocketMQ将购票流程一分为二**5.为同转异增加logId&#x…

【Linux】图文详解Xshell远程连接服务器:以Amazon EC2 VPS为例

文章目录 问题描述解决方案Q&A 问题描述 本地cmd或powershell使用ssh -i “your.pem” user_nameip_address是可以登录Amazon EC2云服务器的。 然而&#xff0c;当使用XShell以SSH加载PEM文件方式登录亚马逊EC2云服务器&#xff0c;一直出现输入密码的问题&#xff0c;如…

Fastjson配置消息转换器(时间格式问题)

问题&#xff1a; 我们可以看见&#xff0c;日期的格式有点问题。 由于ArticleListVO类的createTime成员变量是Date类型&#xff0c;默认是由java的Jackson来处理&#xff0c;使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法&#xff0c;例如&…

是否应该升级到ChatGPT 4.0?深度对比ChatGPT 3.5与4.0的差异

如果只是想简单地体验AI的魅力&#xff0c;感受大模型的独特之处&#xff0c;或是玩一玩文字游戏&#xff0c;那么升级至ChatGPT 4.0可能并非必需。然而&#xff0c;若你期望将AI作为提升工作学习效率的得力助手&#xff0c;那么我强烈建议你升级到ChatGPT 4.0。 如果你不知道…

【网站项目】面向社区健康服务的医疗平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

从原理图到PCB全过程(嘉立创)1

1 将已经画好的原理图更新到PCB中&#xff08;点击应用修改&#xff09; 2 一开始PCB是杂乱的&#xff0c;需要回到原理图&#xff0c;框选各个模块&#xff0c;然后按住CtrlShiftX会自动在PCB显示这个部分&#xff0c;然后把各个部分分开 3 PCB画板需要有板框(嘉立创每个月都i…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

A New Image Contrast Enhancement Algorithmusing Exposure Fusion Framework

Abstract 弱光图像由于能见度低&#xff0c;不利于人类观察和计算机视觉算法。为了解决这一问题&#xff0c;人们提出了许多图像增强技术&#xff0c;但现有的方法不可避免地会出现对比度增强不足和过度增强的问题。在本文中&#xff0c;我们提出了一种图像对比度增强算法来提…

瑞吉外卖实战学习--8、人员编辑更新

人员编辑更新 前言1、进入编辑窗口需要先获取用户信息2、通过上篇文章的update的方法来改变数据3、测试效果 前言 1、进入编辑窗口需要先获取用户信息 通过注解PathVariable 来获取路径需要携带的id然后赋值到路径上&#xff0c;再通过id查询用户信息 /*** 通过id查询用户信…

VUE3极速上手手册

文章目录 Vue3简介一、整体认识Vue3项目1、创建Vue3工程2、主要工程结构 二、数据双向绑定1、vue2语法的双向绑定2、OptionsAPI和CompositionAPI3、Vue3中的数据双向绑定3.1 ref定义基础类型响应式数据3.2 reactive定义对象型响应式数据3.3 ref对比reactive3.4 标签的ref属性3.…

Android 开发 Spinner setSelection 不起作用

问题 Android 开发 Spinner setSelection 不起作用 详细问题 笔者进行Android项目开发&#xff0c;根据上一个页面用户选择数据&#xff0c;显示当前页面Spinner选项&#xff0c;调用 Spinner setSelection 不起作用。 相关java代码 spinner.setAdapter(adapter); …