.NET为什么要使用异步(async)编程?⭐⭐⭐⭐⭐
.NET为什么要使用异步(async)编程?
有几点坐下笔记
⭐⭐⭐⭐:
1. 同步方法
static void Main(string[] args)
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:开始");
// 调用同步方法
SyncTestMethod();
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:结束");
Console.ReadKey();
} /// <summary>
/// 同步方法
/// </summary>
static void SyncTestMethod()
{
for (int i = ; i < ; i++)
{
var str = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:SyncTestMethod{i}";
Console.WriteLine(str);
Thread.Sleep();
}
}
控制台打印:
-- :: :开始
-- :: :SyncTestMethod0
-- :: :SyncTestMethod1
-- :: :SyncTestMethod2
-- :: :SyncTestMethod3
-- :: :SyncTestMethod4
-- :: :SyncTestMethod5
-- :: :SyncTestMethod6
-- :: :SyncTestMethod7
-- :: :SyncTestMethod8
-- :: :SyncTestMethod9
-- :: :结束
主线程在调用同步方法时,会直接在主线程中执行同步方法,这个时候若SyncTestMethod方法后面还有其它方法,都需要等待SyncTestMethod执行完成。(就是要有个先来后到)

2. 异步方法
static void Main(string[] args)
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:开始");
// 调用异步步方法
AsyncTestMethod();
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:结束");
Console.ReadKey();
} /// <summary>
/// 异步方法
/// </summary>
/// <returns></returns>
static async Task AsyncTestMethod() {
await Task.Run(() => {
for (int i = ; i < ; i++)
{
Console.WriteLine($"AsyncTestMethod");
Thread.Sleep();
}
});
}
控制台打印:
2019-03-26 14:52:37 5237:开始
2019-03-26 14:52:37 5237:结束
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
2019-03-26 14:52:37 5237:AsyncTestMethod
Task.Run(()=>{}) 这种方式执行异步任务,异步任务将会在一个独立的线程去执行异步方法,
⭐⭐⭐⭐如果需要在异步方法执行完成之后再在主线程中执行其它方法,则需要使用Wait()来等待异步任务执行完成。⭐⭐⭐⭐

3. 等待(awiat)异步方法
static void Main(string[] args)
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:开始");
// 调用异步步方法
AsyncTestMethod();
// 等待异步方法执行完成
m1.Wait();/////////////////////////////////////这里出现awit这个关键字,就是主线程,等待异步线程完成
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:结束");
Console.ReadKey();
} /// <summary>
/// 异步方法
/// </summary>
/// <returns></returns>
static async Task AsyncTestMethod() {
await Task.Run(() => {
for (int i = ; i < ; i++)
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ms")}:AsyncTestMethod");
Thread.Sleep();
}
});
}
控制台打印:
2019-03-26 14:55:51 5551:开始
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:AsyncTestMethod
2019-03-26 14:55:51 5551:结束

.NET为什么要使用异步(async)编程?⭐⭐⭐⭐⭐的更多相关文章
- 异步(async)编程
思考:为什么要使用异步编程? 我们先看看同步方法和异步方法之前在程序中执行的逻辑: 1. 同步方法 static void Main(string[] args) { Console.WriteLin ...
- 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: ...
- python异步IO编程(一)
python异步IO编程(一) 基础概念 协程:python generator与coroutine 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio ...
- python异步IO编程(二)
python异步IO编程(二) 目录 开门见山 Async IO设计模式 事件循环 asyncio 中的其他顶层函数 开门见山 下面我们用两个简单的例子来让你对异步IO有所了解 import asyn ...
- Javascript教程:js异步模式编程的4种解决方法
随着人们对网站视觉效果及用户体验的要求越来越高,所以在未来网站的建设中,设计师们开始越来越多的使用了js文件来达到预期的效果,随着js文件的越来越多,令设计师们最头痛的事情也就来了,那就是Javasc ...
- Javascript:自己写异步流程编程框架
背景 自从NodeJs出来以后,异步编程便更加系统化和框架话了,为了应对异步编程框架带来的深层嵌套问题,社区也出现了异步流程编程框架,本文主要对异步流程框架做一个简单的解析. 现配代码了 var As ...
- c# 异步( Async ) 不是多线程
c# 异步( Async ) 不是多线程 误解 async 在调试 xxxxAsync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 Async 冠名的函数是多线程. 对于 ...
- angular之Rxjs异步数据流编程入门
Rxjs介绍 参考手册:https://www.npmjs.com/package/rxjs 中文手册:https://cn.rx.js.org/ RxJS 是 ReactiveX 编程理念的 Jav ...
- Angular RxJs:针对异步数据流编程工具
一. RxJs:针对异步数据流编程工具 1. 创建subject类对象(发送方) 2. subject.subscribe(观察者); (注册观察者对象observer,可以注册多个相当于回调函数取数 ...
随机推荐
- 2019-10-19-dotnet-给MatterMost订阅RSS博客
title author date CreateTime categories dotnet 给MatterMost订阅RSS博客 lindexi 2019-10-19 08:12:36 +0800 ...
- java 获得Class对象
如何得到各个字节码对应的实例对象? 每个类被加载后,系统会为该类生成对应的Class对象,通过Class对象可以访问到JVM中的这个类, 3种方式: 1.调用某个类的class属性获取Class对象, ...
- P1050 全排列
题目描述 给定一个正整数n, 按照递增顺序打印数字1到n的所有排列. 输入格式 一个整数n(1<=n<=7). 输出格式 按照递增的顺序输出n的所有排列, 详见样例.请注意,每行末尾不能有 ...
- java编程规范大全
JAVA编程规范大全 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失.(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性 ...
- Vue中的scoped及穿透方法(修改第三方组件局部的样式)
何为scoped? 在vue文件中的style标签上,有一个特殊的属性:scoped.当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组 ...
- 802.1X的体系结构
- C# 获取 PC 序列号
在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是在 C# 可以使用 WMI 来拿到序列号 首先是安装 System.Manage ...
- 洛谷——P1540机器翻译(队列操作)
#include<bits/stdc++.h> using namespace std; int main(){ queue<int> num;//存放的内存 ]; int m ...
- c++ unordered_map 自定义key
C++11新增了一类散列容器包括unordered_set, unordered_map, unordered_multiset, unordered_multimap, 即之前熟悉的hash_set ...
- Excel数据处理
合并计算: 数据面板下的合并计算 然后设置好合并计算的区域 以及勾选 首行跟最左列