对于异步编程Await和Async的理解
public class AsyncInSync
{
/// <summary>
/// 同步代码里有异步代码
///
///
/// 结果
/// Main Thread Before DelayAsync:1
/// DelayAsync Before Await Thread ID:1
/// DelayReturnTaskAsync Before Await Thread ID:1
/// Main Thread After DelayAsync:1
/// DelayReturnTaskAsync After Await Thread ID:4
/// DelayAsync After Await Thread ID:4
/// </summary>
static public void Test()
{
Console.WriteLine("Main Thread Before DelayAsync:" + Thread.CurrentThread.ManagedThreadId);
DelayAsync(10000);
Console.WriteLine("Main Thread After DelayAsync:" + Thread.CurrentThread.ManagedThreadId);
}
/// <summary>
/// 异步代码里有异步代码
///
///
/// 异步方法里有同步代码执行顺序:
/// 1 当前线程:进入DelayAsync方法
/// 2 当前线程:同步执行Thread.Sleep(1000);
/// 3 当前线程:(发现async里有await)当前线程返回DelayAsync的调用方向下执行。
/// 4 其他线程:执行await后的函数和Thread.Sleep(2000);)
///
/// 在异步方法中:Await之前的执行还是调用的线程,Await之后的执行就是另一个线程了
/// 即:异步方法中,Await之前还是当前线程的同步方法
///
/// </summary>
/// <param name="ms"></param>
/// <returns></returns>
static async void DelayAsync(int ms)
{
Thread.Sleep(1000);
Console.WriteLine("DelayAsync Before Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
await DelayReturnTaskAsync(ms);
Console.WriteLine("DelayAsync After Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
}
/// <summary>
/// 异步代码里有异步代码
/// </summary>
/// <param name="ms"></param>
/// <returns></returns>
static async Task DelayReturnTaskAsync(int ms)
{
Thread.Sleep(1000);
Console.WriteLine("DelayReturnTaskAsync Before Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(ms);
Console.WriteLine("DelayReturnTaskAsync After Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
}
}
对于异步编程Await和Async的理解的更多相关文章
- C#异步编程のawait和async关键字来写异步程序
一.await和async关键字 .Net平台不断推出了新的异步编程模型,在.net4.5中加入了关键字await和async,顾名思义,await是指方法执行可等待,即可挂起直到有结果(不是必须立即 ...
- .Net 多线程 异步编程 Await、Async和Task
await和async简介 await和async是在C#5中引入,并且在.NetFramewor4.5以及.NetCore中进行了支持.主要是解决性能瓶颈,并且增强系统的响应能力. msdn关于 ...
- C#基础系列——异步编程初探:async和await
前言:前面有篇从应用层面上面介绍了下多线程的几种用法,有博友就说到了async, await等新语法.确实,没有异步的多线程是单调的.乏味的,async和await是出现在C#5.0之后,它的出现给了 ...
- 【转】剖析异步编程语法糖: async和await
一.难以被接受的async 自从C#5.0,语法糖大家庭又加入了两位新成员: async和await. 然而从我知道这两个家伙之后的很长一段时间,我甚至都没搞明白应该怎么使用它们,这种全新的异步编程模 ...
- [C#]剖析异步编程语法糖: async和await
一.难以被接受的async 自从C#5.0,语法糖大家庭又加入了两位新成员: async和await. 然而从我知道这两个家伙之后的很长一段时间,我甚至都没搞明白应该怎么使用它们,这种全新的异步编程模 ...
- 走进异步编程的世界--async/await项目使用实战
起因:今天要做一个定时器任务:五分钟查询一次数据库发现超时未支付的订单数据将其状态改为已经关闭(数据量大约100条的情况) 开始未使用异步: public void SelfCloseGpPayOrd ...
- 异步编程新方式async/await
一.前言 实际上对async/await并不是很陌生,早在阮大大的ES6教程里面就接触到了,但是一直处于理解并不熟练使用的状态,于是决定重新学习并且总结一下,写了这篇博文.如果文中有错误的地方还请各位 ...
- 聊聊IOCP,聊聊异步编程
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- 【.NET异步编程系列1】:await&async语法糖让异步编程如鱼得水
前导 Asynchronous programming Model(APM)异步编程模型以BeginMethod(...) 和 EndMethod(...)结对出现. IAsyncResult Beg ...
随机推荐
- eclipse设置tomcat部署目录地址
参考: https://blog.csdn.net/lvyuan1234/article/details/53418818 右键,open 操作前提是所有项目移除,并且右键clean掉相关数据! 修改 ...
- Base64和3DES算法
Base64加密算法 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.它的优点是算法效率高,编码出来的结果比较简短,同时也具有不可读性. ...
- 【HDU6602】Longest Subarray【线段树+分治】
题目大意:给出一串序列,询问最长的合法子串为多长,其中合法子串必须满足子串中[1,C]的数量大于等于K或者为0 题解: 定义右端点为包含某一点所需要的最小区间的右端点 那么初始化时就可以O(n)求出每 ...
- kvm无人值守安装centos6
nginx配置 server { listen default_server; server_name _; root /home/iso; # Load configuration files fo ...
- 楼房重建 (rebuild)
楼房重建 (rebuild) 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子.为了简化问题 ...
- PHP【Laravel】delayer基于redis的实现订单超时改变状态
实现这个功能前你需要知道以下,不然可能会比较吃力:1.服务器的计划任务,shell脚本,或者你有宝塔自带的计划任务会方便很多.2.有所了解Redis.3.会写PHP业务逻辑. 好了进入在正题,这里使用 ...
- 53、tensorflow基本操作
import tensorflow as tf import numpy as np x_data = np.float32(np.random.rand(2,100)) print(x_data) ...
- Openstack组件部署 — Keystone Install & Create service entity and API endpoints
目录 目录 前文列表 Install and configure Prerequisites 先决条件 Create the database for identity service 生成一个随机数 ...
- 启动项目时,Mysql的连接问题
1.com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection ...
- shell脚本之nginx的安装
为了编写nginx自动部署的脚本而刚学习的shell脚本语言.写文章只是为了记录,有错误勿喷. 一.创建shell脚本程序 操作系统是Linux的 CentOS 7 版本. ...