初探asp.net异步编程之await
终于毕业了,也顺利进入一家期望的旅游互联网公司。27号入职。放肆了一个多月没写代码,好方啊。
另外一下观点均主要针对于await.
请先看这段话,来自async in C# 5.0. 接下来几个月的时间,我将花时间来简单翻译这本书。
*问题1:await会让当前线程一直等待吗?await等待的时间中一直占用线程资源吗?
*问题2:等待await数据返回交给等待线程再继续向下执行吗?
*问题3:向await下一条语句执行的线程,是执行await的线程吗?
*问题1:异步编程可以让程序变快吗?
*问题2:异步编程执行耗时计算有用吗?
*问题3:既然异步编程执行顺序和同步相同,那么其意义何在?
- class Program
- {
- static void Main(string[] args)
- {
- Task.Run(()=>FirsTask());
- Console.ReadLine();
- }
- public static async Task<string> FirsTask()
- {
- Console.WriteLine("1.当前线程是:" + Thread.CurrentThread.ManagedThreadId);
- var result = await SecondTask();
- Console.WriteLine("6.当前线程是:" + Thread.CurrentThread.ManagedThreadId);
- return result;
- }
- public static async Task<string> SecondTask()
- {
- using (var client = new HttpClient())
- {
- Console.WriteLine("2.当前线程是:" + Thread.CurrentThread.ManagedThreadId);
- var result = await client.GetAsync(
- "http://stackoverflow.com/questions/37991851/jenkins-configure-page-not-loading-version1-651-3-chrome-browser");
- await ThirdTask();
- Console.WriteLine("5.当前线程是:" + Thread.CurrentThread.ManagedThreadId);
- return await result.Content.ReadAsStringAsync();
- }
- }
- public static async Task<string> ThirdTask()
- {
- using (var client = new HttpClient())
- {
- Console.WriteLine("3.当前线程是:" + Thread.CurrentThread.ManagedThreadId);
- var result = await client.GetAsync(
- "http://stackoverflow.com/questions/37993657/managing-outgoing-calls-settings-in-skype-for-business-client-using-remote-power");
- Console.WriteLine("4.当前线程是:" + Thread.CurrentThread.ManagedThreadId);
- return await result.Content.ReadAsStringAsync();
- }
- }
- }






异步编程特别适用于网络操作,因为网络操作发起请求之后等待它完成就行,所以这时候执行到这的线程,可以释放并会到线程池中,网络操作执行完成之后,再从线程池中随机拿一个线程继续执行。
最后的补充:刚才讨论的是await的作用。之所以如上测试代码能够按照同步的过程来执行,是await的作用。比如我们在FirstTask中不等待SecondTask的结果时,那么执行顺序是会改变的,6会提前输出出来。这是async的作用,不阻塞线程。我个人认为,在不需要await结果的情况下,async是可以减少执行时间的。
转载请注明本文地址: http://www.cnblogs.com/tdws/p/5613871.html%20%20%20%20
初探asp.net异步编程之await的更多相关文章
- net异步编程之await
net异步编程之await 初探asp.net异步编程之await 终于毕业了,也顺利进入一家期望的旅游互联网公司.27号入职.放肆了一个多月没写代码,好方啊. 另外一下观点均主要针对于await ...
- ASP.NET 异步编程之Async await
本文重点介绍的是.NET Framework4.5 推出的异步编程方案 async await 请先看个5分钟的微软演示的视频:视频地址: https://channel9.msdn.com/Blo ...
- python异步编程之asyncio
python异步编程之asyncio 前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率, ...
- 异步编程之Generator(1)——领略魅力
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- 异步编程之Promise(3):拓展进阶
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- 异步编程之Promise(2):探究原理
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- (翻译)异步编程之Promise(1):初见魅力
原文:https://www.promisejs.org/ by Forbes Lindesay 异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2) ...
- Javascript异步编程之setTimeout与setInterval详解分析(一)
Javascript异步编程之setTimeout与setInterval 在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛 ...
- 异步编程之co——源码分析
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
随机推荐
- 学习设计模式第二十七 - GoF之外简单工厂模式
示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...
- 企业IT管理员IE11升级指南【4】—— IE企业模式介绍
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- CentOS RDO方式快速安装OpenStack
一.了解RDO RDO是什么? RDO是红帽Red Hat Enterprise Linux OpenStack Platform的社区版,类似RHEL和Fedora,RHEV和oVirt这样的关系. ...
- 【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法
笔者正在开发的新项目在升级了最新版本的Telerik Control和决定支持IE10后,遇到了一个很棘手的问题,偶尔会在打开Radwindow的时候报JS error :unable to get ...
- 《Spark快速大数据分析》—— 第五章 数据读取和保存
由于Spark是在Hadoop家族之上发展出来的,因此底层为了兼容hadoop,支持了多种的数据格式.如S3.HDFS.Cassandra.HBase,有了这些数据的组织形式,数据的来源和存储都可以多 ...
- Intellij IDEA 13.1.3 打开多个窗口项目
作者QQ:1095737364 Intellij 是Java开发人员最喜欢的编程工具.默认情况只能打开一个窗口一个项目,本文就是教大家打开多个窗口,实现同时打开多个项目 第一步:打开Intellij, ...
- SSIS Destination 组件使用Fast-Load mode出错
查看一个Package的历史Message 数据,发现 DataFlow Task 经常出错,错误信息的Description是: Description: "While reading c ...
- php常用函数
1.随机数和时间 echo rand(); //随机数生成器echo rand(0,10); //生成某个范围内的随机数 <!DOCTYPE html PUBLIC "-//W3C/ ...
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
- Android随笔之——模拟按键操作的几种方式
前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之——使 ...