关于C#异步编程的建议
基于任务的异步编程模型 (TAP) 提供了异步代码的抽象化。你只需像往常一样将代码编写为一连串语句即可。就如每条语句在下一句开始之前完成一样,你可以流畅地阅读代码。编译器将执行许多转换,因为其中一些语句可能会开始运行并返回表示正在进行的工作的 Task。
这就是此语法的目标:支持读起来像一连串语句的代码,但会根据外部资源分配和任务完成时间以更复杂的顺序执行。这与人们为包含异步任务的流程给予指令的方式类似。在本文中,你将通过做早餐的指令示例来查看如何使用 async 和 await 关键字更轻松地推断包含一系列异步指令的代码。
其中在使用异步方法中最好不要使用void当做返回值,无返回值也应使用Task作为返回值,因为使用void作为返回值具有以下缺点
无法得知异步函数的状态机在什么时候执行完毕
如果异步函数中出现异常,则会导致进程崩溃
❌异步函数不应该返回void
static void Main(string[] args)
{try{// 如果Run方法无异常正常执行,那么程序无法得知其状态机什么时候执行完毕Run();}catch (Exception ex){Console.WriteLine(ex.Message);}Console.Read();
}
static async void Run()
{// 由于方法返回的为void,所以在调用此方法时无法捕捉异常,使得进程崩溃throw new Exception("异常了");await Task.Run(() => { });}
☑️应该将异步函数返回Task
static async Task Main(string[] args)
{try{// 因为在此进行await,所以主程序知道什么时候状态机执行完成await RunAsync();Console.Read();}catch (Exception ex){Console.WriteLine(ex.Message);}
}
static async Task RunAsync()
{// 因为此异步方法返回的为Task,所以此异常可以被捕捉throw new Exception("异常了");await Task.Run(() => { });}
注:事件是一个例外,异步事件也是返回void
关于C#异步编程的建议相关推荐
- 超赞!阿里资深P9架构师总结出第一本《Java异步编程实战》
什么是异步编程: 传统的同步编程是一种请求响应模型,调用一个方法,等待其响应返回 异步编程就是要重新考虑是否需要响应的问题,也就是缩小需要响应的地方.因为越快获得响应,就是越同步化,顺序化,事务化,性 ...
- 关于C#异步编程你应该了解的几点建议
前段时间写了一篇关于C#异步编程入门的文章,你可以点击<C#异步编程入门看这篇就够了>查看.这篇文章我们来讨论下关于C#异步编程几个不成文的建议,希望对你写出高性能的异步编程代码有所帮助. ...
- 【C++】多线程与异步编程【四】
文章目录 [C++]多线程与异步编程[四] 0.三问 1.什么是异步编程? 1.1同步与异步 1.2 **阻塞与非阻塞** 2.如何使用异步编程 2.1 使用全局变量与条件变量传递结果 实例1: 2. ...
- nodejs笔记-异步编程
1.函数式编程 1.1高阶函数 函数参数只接受基本数据类型或者对象引用,返回值也是基本数据类型和对象引用. //常规参数传递和返回 function foo(x) {return x; } 复制代码 ...
- mysql 数据库引擎切花_asyncio异步编程【含视频教程】
不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3.aiohttp等. 听说异步如何如何牛逼?性能如何吊炸天....但他到底是咋回事呢? 本 ...
- 异步编程(asyncawait)
前言 本来这篇文章上个月就该发布了,但是因为忙 QuarkDoc 一直没有时间整理,所以耽搁到今天,现在回归正轨. C# 5.0 虽然只引入了2个新关键词:async和await.然而它大大简化了异 ...
- 异步编程 In .NET(转载)
概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...
- 协程、asyncio、异步编程
文章目录 1 协程 2 异步编程 3.1 事件循环 3.2 async 3.3 await 3.4 Task对象 1 协程 协程不是由操作系统提供,由程序员人为提供(用户态上下文切换技术) 协称(Co ...
- python2异步编程_最新Python异步编程详解
我们都知道对于I/O相关的程序来说,异步编程可以大幅度的提高系统的吞吐量,因为在某个I/O操作的读写过程中,系统可以先去处理其它的操作(通常是其它的I/O操作),那么Python中是如何实现异步编程的 ...
最新文章
- 深度学习“三部曲”重磅资源、python、DL理论、工程实战全覆盖(附免费下载)...
- 解决注册并发问题并提高QPS
- Java程序员3面小米,被俩算法题难倒,微软员工6分钟解决,真丢脸
- 小程序promise封装post请求_微信小程序promise封装get/post请求
- 中山行书百年纪念版字体可以商用吗_干货|免费可商用字体
- 关于matlab的单精度与双精度
- python桌面图形_Python桌面图形程序美化的方法论
- Gradle build设置自动log开关
- 1081. Rational Sum (20) -最大公约数
- 如何学习matlab 知乎,知乎日报
- Java中12个原子操作类
- SQL Server中 sysobjects、syscolumns、systypes
- Path(0)贝塞尔曲线
- infopath转换html,Microsoft Tools to Save InfoPath Forms as HTML
- ORACLE表、表分区、表空间的区别
- ubuntu软件安装、卸载
- bootstrap datetimepicker 初始化及取值
- 如何使用Mac电脑内置的屏幕共享功能进行远程桌面协助?
- 纪中游记 - Day 3
- 《Redis视频教程》(p2)