分类:
Asp.net Core入门
◆
标签:
#Asp.Net core基础
#基础
#Web
◆
发布于: 2023-06-04 20:14:16
我们前两章学习了如何使用ASP.net Core的Startup类,本章我们继续学习依赖服务注入的概念,这个也就是我们常说的DI, 还有另外一个词我们也经常提及,那就是IoC - 控制反转。很多同学在学习到这两个概念的时候,可能经常会有些莫名其妙,IoC和DI到底有什么联系和区别?这两个概念有人说是一回事,实际上这个理解是大错特错,个人认为正确的理解应该是:IoC是目的,而且DI是实现IoC的手段。所谓的控制反转实际的目的是将流程委托给应用程序的框架,也就是将控制交给框架,然后由框架使用一定的技术,方便用户以这些技术或者接口扩展该框架的功能,实际上也就是将某些场景的流程控制功能模块化交由框架来实现,留出接口来方便用户控制和扩展,这就是IoC的设计目的,而DI就是实现这个目的的技术之一,也是目
Read more
分类:
Asp.net Core入门
◆
标签:
#Asp.Net core基础
#基础
#Web
◆
发布于: 2023-06-04 20:11:11
我们前一章学习了ASP.net Core的Startup类,在前一章我们提及了利用IHostingStartup接口从外部的库或者包给现有的应用添加新的功能或者配置, 我们本节来介绍和学习一下这个功能。
IHostingStartup接口定义
我们先看一下接口IHostingStartup接口的定义:
public interface IHostingStartup
{
public void Configure(IWebHostBuilder);
}
从接口的定义可以看到该接口仅仅只有一个方法Configure, 参数是IWebHostBuilder。
外部库或者类定义的一般步骤
要给其他应用提供在初始化的时候添加配置,需要定义一个库或者不带应用入口的控制台
Read more
分类:
Asp.net Core入门
◆
标签:
#Asp.Net core基础
#基础
#Web
◆
发布于: 2023-06-04 20:08:02
写在这个系列的前面,我购买了蒋金楠的书《ASP.net Core 3框架揭秘》这套书分为上下两册,在学习这套书之前我浏览了一遍这套书的内容,这套书的基本架构和微软的官方文档大致相同,主要是作为框架ASP.net Core的基本架构组件的学习,应该说结合微软的官方文档是一个非常好的补充,但是非常可惜的是,当我开始认真的阅读这套书时,我发现这套书的有些内容确实不错,但是阅读到一定的地方我不得不跳过很多内容,主要原因是书的组织上还是有些问题的,另外作者技术水平不用怀疑,但是作者的写作水品是真的有值得提高的地方,虽然这套书的阅读对象肯定不是初入门者,但是书里很多内容立意也是向从易到难,从代码到设计详细的讲清楚,但是很可惜,这方面我认为作者真的要提高,很多内容看了一下就很难看下去。很多知识其实不用这么
Read more
分类:
.Net技术
◆
标签:
#异步编程
#基础
#.Net
◆
发布于: 2023-06-04 19:53:28
本篇是.Net异步编程的最后一篇了,希望这篇可以帮你总结前面几篇学习内容,并且在本章得到升华,也为大家将来在.Net中使用异步编程大大提高您应用吞吐量、性能。
在.Net中编写IO或者CPU异步任务是非常直接的,.Net/.Net Core/Window Runtime支持在语言级别使用Task/Task<T>/async/await几个接口用于异步编程,本章向大家介绍async背后发生的一些基本原理,帮助大家更好的理解async以及await使用。
Task And Task<T>
简单的来讲,Task是一个Promise Model of Concurrency模式的实现,关于什么是Promise Model of Concurrency, 大家可以自行去搜索并学习一下该模
Read more
分类:
.Net技术
◆
标签:
#异步编程
#基础
#.Net
◆
发布于: 2023-06-04 19:50:54
本节演示如何使用方法WhenAny()来巧妙的处理多个任务的await, 一定要仔细阅读代码。
本节代码可以从这里找到:https://github.com/hylinux/azure-demo/tree/main/dotnet/basic/asyncdemo/WhenAnyDemo
创建应用
使用如下的命令创建应用
mkdir WhenAnyDemo
cd WhenAnyDemo
dotnet new console
替换using
以编辑器打开文件Program.cs,替换如下的using语句
using System;
using System.Collections.Generic;
using System.Diagnostics;
using
Read more
分类:
.Net技术
◆
标签:
#异步编程
#基础
#.Net
◆
发布于: 2023-06-04 19:48:39
我们上一章学习了如何手动的取消任何,本章学习使用方法CancellationTokenSource.CancelAfter定时取消任务,本章的源代码可以在这里找到:https://github.com/hylinux/azure-demo/tree/main/dotnet/basic/asyncdemo/CancelTaskByTime
闲话少说,直接上代码。
创建应用
以如下的命令行创建代码:
mkdir CancelTaskByTime
cd CancelTaskByTime
dotnet new console
替换using语句
以编辑器打开文件Program.cs, 替换using语句如下:
using System;
using System.
Read more
分类:
.Net技术
◆
标签:
#异步编程
#基础
#.Net
◆
发布于: 2023-06-04 19:09:31
我们前面几章学习了异步编程的基本用法和基本理论,本章来学习如何取消一个Task。
用户可以取消还没有完成的任务,实际的基本原理也很简单,只需要给没个异步方法带入CancellationTokenSource的实例就可以了,下面的例子演示如何取消一个任务,您可以从这里找到示例代码:https://github.com/hylinux/azure-demo/tree/main/dotnet/basic/asyncdemo/CancelDemo
该实例的场景是取消从网络上下载内容的web客户端。
创建控制台应用
使用如下的命令行创建控制台应用
mkdir CancelDemo
cd CancelDemo
dotnet new console
Read more
分类:
.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