分类:
.Net技术
◆
标签:
#异步编程
#基础
#.Net
◆
发布于: 2023-06-04 19:07:24
我们前面已经学习了关于.Net异步方法的返回有比较常见的几种类型:
返回Task<T>泛型类型,这里的T是指客户具体想返回的类型
返回Task非泛型类型,如果客户的异步方法无需返回值
void, 只能用在事件异步方法中,用于定义方法无需返回值。
除了这几个返回值类型,我们还有如下几种:
从C# 7.0开始,可以返回任何支持方法GetAwaiter的类型对象,返回对象值可以由方法GetAwaiter来返回。
从C# 8.0开始,可以返回类型IAsyncEnumerable<T>类型,主要是针对于异步返回返回一个异步的流(stream)
另外对于windows runtime由如下几种返回类型:
DispatcherOperation, 返回窗口的一个异步操作
IA
Read more
分类:
.Net技术
◆
标签:
#异步编程
#基础
#.Net
◆
发布于: 2023-06-04 19:04:57
任务异步编程模型,简写为TAP, 全称:Task asynchronous programming model, 这是从C#5添加的新特性,TAP的最大优势是让用户可以以同步模式的代码结构,使用TAP获得异步编程的优势。在传统的异步编程中,用户需要处理很多和异步相关的知识点,在C#中这些都由编译器来完成,该特性自从.Net Framework 4.5之后,以及.Net Core, Windows Runtime都支持该特性。
本节是对于TAP的概述,列出相关的知识点,同时我们在后期的文章里会一一探讨本节列出的知识点。
异步提升响应
对于很多可能会产生阻塞的场景,异步是自然而然的选择,类似访问web服务,特别是在缓慢或者有较大延迟的web服务上,如果在这个场景里使用同步模式,那么
Read more
分类:
.Net技术
◆
标签:
#.Net
#异步编程
#基础
◆
发布于: 2023-06-04 19:01:12
前面我们学习了如何使用关键字async以及await和类Task进行异步编程,并且通过一个例子演示了如何进行异步方法的设计以及优化,今天我们继续学习一下异步编程主要应用场景,以及如何应对这些场景。
在.Net中异步应用的场景主要有两种:
基于IO的异步编程:例如:从网络上请求数据,存取数据库,读写文件等等。
基于CPU密集计算的异步编程,例如很多需要大量的CPU计算的应用场景。
以上这两个应用场景是.Net的异步编程模型中非常常见的应用场景,应用.Net的异步编程模型实际上是主要是基于类Task以及Task<T>的泛型模型,在我们的模型中通过关键字async以及await来应用他们,这个在我们之前的文章中也详细的描述过了。针对以上两个场景,一般推荐的做法如下:
基于IO
Read more
分类:
.Net技术
◆
标签:
#异步编程
#.Net
#基础
◆
发布于: 2023-06-04 18:48:24
.Net的TAP(任务异步编程模式: Task Asynchronous programming Model)为编写异步代码提供了一个更高级的抽象层,使用这个编程模式,您的完成异步任务的代码和普通的同步顺序执行的代码看起来也没有什么区别,只需要遵守约定,大部分的工作由编译器根据外部资源的分配(例如Task, 线程,内存等等)来自动完成,编译器完成大部分的工作,大部分情况下会返回一个基于Task或者Task<T>类型的返回值。在这个模型中,用户只需要使用关键字Async和Await两个语言级别的关键字来定义异步方法、调用异步方法,从而达到异步编程的目的。
在我们这篇入门文章里,先以一个日常生活的例子简要的介绍大家如何将一个任务分拆为多个异步任务,同时也介绍如何使用async和await这
Read more
分类:
.Net技术
◆
标签:
#异步编程
#.Net
#基础
◆
发布于: 2023-06-04 18:42:39
前我们有很多种工具都适合用于异步/并行编程,但是每种语言对于这个领域的支持力度各不相同,像Java的编程模型从Java7开始引入了几个基于多线程的工具,例如提供fork/join API, 预定义的线程池等等,同时需要大量的线程安全的集合以及各种原子工具以及操作,还需要了解各种锁,例如CAS锁等等,对程序员的要求非常之高,编程模型也非常困难,但是对于C# 以及对应的.Net以及.Net Core, 微软推出了更为明晰易用的方式用于异步/并行编程,例如我们即将要介绍的在语言级别的async,await关键字,以及随之引入的TAP异步编程模型,以及TPL并发编程模型,以及万不得已更为底层的基于System.Threading的Thread编程模型等等。相比较其他的语言, C#以及.Net平台提供
Read more
分类:
.Net技术
◆
标签:
#Logs
◆
发布于: 2023-05-21 17:37:41
虽然对于dotnet 平台来说,日志的记录是非常快的,一般情况直接使用log的扩展方法记录日志就可以了,对于大多数的应用场景都是适用的,但是有一种情况是需要重新考量这种方式的,如果你的系统面对的访问量非常大,这个时候日志的使用就会显得非常重要了,我们需要尽可能的优化这个部分,关于这个部分实际上微软已经给出了解决方案:使用LogMessages 模式,关于这个部分微软有一个文档专门讲述了这个部分:
High-performance logging with LoggerMessage in ASP.NET Core | Microsoft Docs 这个是for ASP.net Core 框架的
Read more