分类:
.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
分类:
.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
分类:
Azure指南
◆
标签:
#Azure
#基础
#Azure Cloud Architecting
#Azure入门
◆
发布于: 2023-05-28 15:21:31
本章介绍如何使用模板来创建虚拟机。
使用模板
ARM(Azure Resource Template)我们前面入门文章中有给大家介绍过,可以回头再看一下,如何使用ARM模板来创建资源有两种方式:
直接使用Portal来部署模板
这种方式需要将您的模板放置在一个Azure Portal可以读取的位置,由Azure Portal直接读取,然后利用Azure Portal的UI一步一步的创建资源。可以使用浏览器用下述的格式来访问:
https://portal.azure.com/#create/Microsoft.Template/uri/{您的模板位置}
例如下面的链接:
https://portal.azure.cn/#create/Microsoft.Templa
Read more
分类:
Azure指南
◆
标签:
#Azure
#基础
#Azure Cloud Architecting
#Azure入门
◆
发布于: 2023-05-28 15:19:03
对于微服务架构的支持,Azure也提供了多种服务,包括如下几种
Azure Service Fabric, 也是本章想介绍的服务
Azure Kubernet Service, AKS, 这个是k8s的cloud版了。
Azure Spring Cloud, 基于Java的微服务解决方案。
三种方案中孰优孰劣,相对比较起来,我还是偏向于Service Fabric和AKS, Spring Cloud限制需要使用基于JVM的工具,限制有点大,我们本章向大家介绍Service Fabric。
Azure Service Fabric提供了一个可靠的,灵活的微服务平台,可以使用该平台提供的技术编写分布式应用以及服务,可以是无状态的也可以是有状态的(Stateless and St
Read more