C#异步编程(一):异步基础
class Program{static void Main(string[] args){var result = DownloadStringWithTimeout("http://www.yueyangdujia.com");Console.WriteLine("异步方法执行中");for (int i = 0; i < 3; i++){System.Threading.Thread.Sleep(1000);Console.WriteLine("休息了"+(i+1)+"秒");} var str= result.Result; //这里使用到异步方法的返回值,需要等待异步方法执行完毕。 Console.WriteLine("异步方法执行后,同步执行以下代码");Console.WriteLine(str);Console.Read();}static async Task<string> DownloadStringWithTimeout(string uri){using (var client=new HttpClient()){var downloadTask = client.GetStringAsync(uri);var timeoutTask = Task.Delay(3000);var completedTask = await Task.WhenAny(downloadTask, timeoutTask);if (completedTask == timeoutTask){System.Threading.Thread.Sleep(2000);Console.WriteLine("异步方法执行完成");return null;}System.Threading.Thread.Sleep(2000);Console.WriteLine("异步方法执行完成");return await downloadTask;}}}
执行顺序如 Console.WriteLine显示一样。DownloadStringWithTimeout和下面的代码一起执行,大概在2秒的时候执行完毕。var str= result.Result;调用异步方法返回值的时候会等候异步方法执行。
下来去掉一些代码如下:
class Program{static void Main(string[] args){var result = DownloadStringWithTimeout("http://www.yueyangdujia.com"); var str= result.Result; //这里使用到异步方法的返回值,需要等待异步方法执行完毕。 Console.WriteLine(str);Console.Read();}static async Task<string> DownloadStringWithTimeout(string uri){using (var client=new HttpClient()){var downloadTask = client.GetStringAsync(uri);var timeoutTask = Task.Delay(3000);var completedTask = await Task.WhenAny(downloadTask, timeoutTask);if (completedTask == timeoutTask){return null;}return await downloadTask;}}}
WhenAny接受两个异步方法参数返回先执行完成的方法。以上可以调整Task.Delay的参数。如果足够小则返回NULL。
还有一个WhenAll方法会等所有方法都执行完毕后再一起返回,代码如下。
static async Task<string> Down(){Task<string> tast1 = DownloadStringWithTimeout("http://www.yueyangdujia.com");Task<string> tast2 = DownloadStringWithTimeout("http://www.yueyangdujia.com");Task<string> tast3 = DownloadStringWithTimeout("http://www.yueyangdujia.com");string[] arr = await Task.WhenAll(tast3, tast2, tast1);return String.Concat(arr);}
转载于:https://www.cnblogs.com/harpz/p/4904742.html
C#异步编程(一):异步基础相关推荐
- async And await异步编程活用基础
async And await异步编程活用基础 原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 awai ...
- Javascript异步编程之一异步原理
本系列的例子主要针对node.js环境,但浏览器端的原理应该也是类似的. 本人也是Javascript新手,把自己这段时间学习积累的要点总结下来,希望可以对同样在学习Javascript/node.j ...
- python2异步编程_Python 异步编程入门
本文是写给 JavaScript 程序员的 Python 教程. Python 的异步编程,其他人可能觉得很难,但是 JavaScript 程序员应该特别容易理解,因为两者的概念和语法类似.JavaS ...
- 异步编程之异步编程与多线程编程的联系和区别
1.异步编程与多线程的区别 共同点:异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性 不同点: (1)线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是 ...
- python2异步编程_python异步编程 (转载)
转自:https://zhuanlan.zhihu.com/p/27258289 本文将会讲述Python 3.5之后出现的async/await的使用方法,以及它们的一些使用目的,如果错误,欢迎指正 ...
- python2异步编程_python异步编程入门
这几天看代码,总是会接触到很多异步编程,之前只想着实现功能,从来没考虑过代码的运行快慢问题,故学习一番. 从0到1,了解python异步编程的演进 1.urllib与requests爬虫 reques ...
- java jpa 异步编程_异步处理时的JPA
java jpa 异步编程 几年前,在Java世界中,几乎显而易见的是,每个"企业"类项目都需要JPA与数据库进行通信. JPA是Joel Spolsky描述的" 泄漏抽 ...
- php怎么进行异步编程,php异步编程是怎样的?
前言 传统的 php-fpm 一个进程执行一个请求,要达到多少并发,就要生成多少个进程.更糟糕的是每次请求都需要重新编译执行,导致并发一直上不来.因此出现了 Swoole 和 WorkerMan 两个 ...
- android 异步编程,flutter异步编程-事件循环、Isolate、Stream(流)
事件循环.Isolate 开始前我们需要明白 Dart 是单线程的并且 Flutter 依赖于 Dart 如果你知道js 中的event loop 将很好理解dart的整个异步过程 先看一段代码 im ...
- 一文了解异步编程基础
什么是异步编程? 异步编程是指并发编程的范式,其中除了单个主应用程序线程之外,工作可以委托给一个或多个并行工作线程.这被称为非阻塞系统,其中整体系统速度不受订单执行的影响,并且多个进程可以同时发生. ...
最新文章
- 你的首个 Progressive Web App
- Myeclipse使用过程配置汇总
- 虚拟服务器设置upnp,TP-Link路由器如何设置UPNP开启【设置步骤】
- nginx大量TIME_WAIT的解决办法--转
- matlab向量的角标,【MATLAB】利用冒号表达式获得子矩阵
- 如何用C#代码查找某个路径下是否包含某个文件
- centos lnmp源码安装mysql_CentOS 6.6 下源码编译安装MySQL 5.7.5
- 万字详解Lambda、Stream和日期
- HTML转义字符大全<转>
- python习题week3
- 为什么ES模块比CommonJS更好?
- JAVA面向对象OOP多态→抽象类abstract、接口interface实现implement、final不变修饰符、样例代码
- 走得快?走的远?---【锻炼身体 好好学习】
- Android底层开发
- 用Python写一个Excel汇总和比对小程序
- 基于jsp的博客系统
- 【JZOJ 4623】搬运干草捆
- lizard的基本使用
- 什么是H5页面及又该如何制作?
- App避免被杀死,常驻后台