分类:
.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
分类:
Asp.net Core认证和授权
◆
标签:
#Asp.Net core基础
#认证
#授权
#.Net
◆
发布于: 2023-05-27 20:25:48
详细列出本站一系列的关于Asp.net Core认证和授权的文章
Read more
分类:
Asp.net Core认证和授权
◆
标签:
#Asp.Net core基础
#认证
#授权
#.Net
◆
发布于: 2023-05-27 20:17:42
我们前面一篇学习了Qauth2.0, 那么openidconnect呢?
前面我们学些了Qauth2.0是一个授权的过程,同时授权的对象也没有兼顾到业务的逻辑,如果我们需要更复杂更精细的业务逻辑,那么在API这一侧还是要做很多的工作的,Qauth2.0有一个极大的缺陷导致了这个问题的发生,那就是第三方应用虽然拿到了Access Token 但是实际上它并不知道这个Access Token到底代表了什么,也就是用户只是给了一个黑盒给它。那么openidConnect作为Qauth 2.0的一个扩展,其实际代表的意思就是会将业务逻辑需要的ClaimPrinpcal 放入到其中,给Qauth 2.0添加了一个叫做Id token的返回,这个Id Token就是我们前面文章讲的JWT, 关于
Read more
分类:
Asp.net Core认证和授权
◆
标签:
#Asp.Net core基础
#认证
#授权
#.Net
◆
发布于: 2023-05-27 20:12:30
QAuth2.0 是基于Token的授权方式,我们前面有一篇文章大致讲述过了基于Token认证和授权的历史,为了大家更好的学习和理解QAuth2.0的出现历史必然性,我们还是旧事重提一下,为什么会有Qauth, 它到底解决了哪些问题。
对于Web应用,我们最早的时候提出的解决方案是通过Session来进行认证和授权的。做法很简单,用户提供用户名和密码(或者其他的方式,例如证书或者密钥等等各种手段)到专用的登录的节点,节点验证通过后,会在服务器端生成一个唯一的ID,同时将用户的信息(也就是我们将的ClaimPrinpcal)系列化存在服务器端(内存里,临时文件,数据库,或者分布式缓存等等)同时将这个唯一的ID返回给客户端(通过cookie或者URL或者查询字符串)但是随着应用规模的扩大,
Read more
分类:
Asp.net Core认证和授权
◆
标签:
#Asp.Net core基础
#授权
#.Net
◆
发布于: 2023-05-27 20:02:40
我们今天来讨论ASP.netCore中的授权。
我们前面讨论了认证,我们需要注意的是认证之后会怎么样?认证之后系统会生成一个Identity, 通过各种其他的方式给到客户或者客户应用程序,也就是一个ClaimPrinpcal, 每个ClaimPrincpal 包含多个ClaimIdentity, 每个ClaimIdentity包含多个Claim, 在基于Web应用中最终对应的数据会是HttpContext.User 用于表示认证成功之后的ClaimPrinpcal. 但是在认证这一侧,对应的是AuthorizationHandlerContext的User属性,也就是AuthorationHandlerContext.User, 需要注意的是HttpContext的User属性和A
Read more
分类:
Asp.net Core认证和授权
◆
标签:
#Asp.Net core基础
#认证
#.Net
◆
发布于: 2023-05-27 18:57:15
我们前面一章聊了我们之前的认证是如何做的,基于Session和基于token的认证方式的不同,其中这里面都有一个用户登录之后,都需要在某些地方保存和用户相关的信息,例如用户的ID, 用户的用户名,用户邮件等等信息,在Session的时代是直接在服务器端保存这些信息,在使用token的时候,是保存token里。
那么在ASP.net Core中同样我们也是需要保存这些信息的,但是在ASP.net Core中对这些信息做了一些抽象。
为了理解这些抽象,我们先来看一个实际生活中的例子:
假如你需要去银行柜台存钱,你拿了钱到达了柜台之后,柜台需要确认你的身份,然后才能为你办理存钱的业务,你需要出示一些相关的证件来证明你就是你,证明了你是你本人之后才能将你和你的银
Read more
分类:
Asp.net Core认证和授权
◆
标签:
#Asp.Net core基础
#认证
#.Net
◆
发布于: 2023-05-27 18:53:17
以前最简单的办法是基于Session的方式,所谓的Session的方式是系统向用户展示一个登录的界面,用户提供正确的依据(例如用户密码)在登录处登录成功后(SignIn), Web系统针对这一次生成一个唯一的ID,同时服务器侧生成和用户相关的信息,例如一个用户对象,这个用户对象里可能保存各种和用户相关的信息,例如用户的ID, 用户的电话等等信息,这部分信息系列化之后存放在服务器侧,然后将生成的唯一ID存于cookie或者是URL查询字符串的形式返回给客户端,用户端每次需要访问资源的时候会这个唯一的ID以cookie或者是以为header值或者是URL查询字符串等形式带入到服务器侧,服务器根据ID 再次从服务器侧查询到和ID相关的用户信息,需要的时候反序列化出来就可以了。
这个
Read more