async 和 await 的进阶

异常的捕获:

static void Main(string[] args){//继续我们的异步编程的使用嘀呀;//关于主线程是无法捕获我们子线程中的异常滴滴啊;var t = DoExceptionAsync();t.Wait();Console.WriteLine($"{nameof(t.Status)}: {t.Status}");   //任务状态Console.WriteLine($"{nameof(t.IsCompleted)}: {t.IsCompleted}");     //任务完成状态标识Console.WriteLine($"{nameof(t.IsFaulted)}: {t.IsFaulted}");     //任务是否有未处理的异常标识
Console.ReadLine();}private static async Task DoExceptionAsync(){try{await Task.Run(() => { throw new Exception(); });}catch (Exception e){Console.WriteLine($"{nameof(DoExceptionAsync)} 出现异常!,异常时:{e.Message.ToString()}");}}}

 

结果:

 

也许你有疑问:

但是:因为:任务没有被取消,并且异常都已经处理完成!

在调用方法中同步等待任务

算了,这个太简单了,有任务的等待,也有任务的取消,.......

代码;

 private static void Main(string[] args){var t = CountCharactersAsync("http://www.cnblogs.com/liqingwen/");t.Wait();   //等待任务结束Console.WriteLine($"Result is {t.Result}");Console.Read();}/// <summary>/// 统计字符数量/// </summary>/// <param name="address"></param>/// <returns></returns>private static async Task<int> CountCharactersAsync(string address){var result = await Task.Run(() => new WebClient().DownloadStringTaskAsync(address));return result.Length;}

这里还有我们两个静态的方法:可采用 Task 的两个静态方法 WaitAll() 和 WaitAny() 。

 

  private static int time = 0;static void Main(string[] args){var t1 = CountCharactersAsync("http://www.cnblogs.com/liqingwen/",1);var t2 = GetRandomAsyn(2);//Task 还以见数组地哦;Task<int>[] tasks = new Task<int>[] {t1,t2};Task.WaitAll(tasks);//或则:Task.WaitAny(tasks); 
Console.WriteLine($"t1.{nameof(t1.IsCompleted)}: {t1.IsCompleted}");Console.WriteLine($"t2.{nameof(t2.IsCompleted)}: {t2.IsCompleted}");Console.ReadLine();}/// <summary>/// 统计字符数量/// </summary>/// <param name="address"></param>/// <returns></returns>private static async Task<int> CountCharactersAsync(string address,int id){var result = await Task.Run(() => new WebClient().DownloadStringTaskAsync(address));Console.WriteLine($"{id} 已经调用完成");return result.Length;}//获取一个随机数private static async Task<int> GetRandomAsyn(int id){var num = await Task.Run(() =>{time++;Thread.Sleep(time * 100);return new Random().Next();});Console.WriteLine($"{id} 已经调用完成");return num;}}

 

在异步方法中异步等待任务

继续我们的异步编程之路........

class Program{private static int time = 0;static void Main(string[] args){//继续我们的异步编程地呀;var t = GetRandomAsync();Console.WriteLine("mian line 1");  //【注意】WhenAll() 异步等待集合内的 Task 都完成,不会占用主线程的时间。Console.WriteLine($"Result: {t.Result}"); //但是这里会堵塞id呀;Console.WriteLine("mian line 2");Console.Read();}private static async Task<int> GetRandomAsync(){time++;var t1 = Task.Run(()=>{Thread.Sleep(time* 600);return new Random().Next();});time++;var t2 = Task.Run(() =>{Thread.Sleep(time*600);return new Random().Next();});//这里开启了两个异步的任务;await Task.WhenAll(new List<Task<int>>() { t1, t2 }); //【注意】WhenAll() 异步等待集合内的 Task 都完成,不会占用主线程的时间。// await Task.WhenAny(new List<Task<int>>() { t1, t2 });
Console.WriteLine($"  t1.{nameof(t1.IsCompleted)}: {t1.IsCompleted} ");Console.WriteLine($"  t2.{nameof(t2.IsCompleted)}:{t2.IsCompleted } ");return t1.Result + t2.Result; //这个就返回了 我们想要的基本值滴呀;
}}

 

结果:

 

如果该成whenAny的结果:

 

 

 

 ps:以上结果是有不确定性呀,你懂滴哦;

 

Task.Delay() 暂停执行

 这个其实是Thread.sleep的一种取代方法地呀;

 private static void Main(string[] args){Console.WriteLine($"{nameof(Main)} - start.");DoAsync();Console.WriteLine($"{nameof(Main)} - end.");Console.Read();}private static async void DoAsync(){Console.WriteLine($"    {nameof(DoAsync)} - start.");await Task.Delay(500);Console.WriteLine($"    {nameof(DoAsync)} - end.");}

 

结果哦:

 

转载于:https://www.cnblogs.com/mc67/p/6256705.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring依赖注入_Spring3:类型安全依赖项注入

spring依赖注入在从Spring跳到类型安全依赖注入之前&#xff0c;我想讨论一下我们之前所做的方式。 我们一直在借助Spring的Autowired注释按类型使用依赖项注入。 像这样的东西会注入Spring Bean。 Autowired private StudentDao studentDao; // Autowires by type. Injects th…

linux系统查看当前安装字库,linux下怎样安装中文字体?

1、首先禁用xfs服务器。 运行Setup命令&#xff0c;在服务项中中止xfs随系统运行的特性。之所以禁用xfs服务器主要是因为xfs会自动更新字体目录下的fonts.dir文件&#xff0c;从而影响我们所做的修改。2、将选中的字体字库拷贝到相关的目录。 一般选用simsun.ttf为基本的字体(据…

Spark Shell的简单使用

简介 Spark shell是一个特别适合快速开发Spark原型程序的工具&#xff0c;可以帮助我们熟悉Scala语言。即使你对Scala不熟悉&#xff0c;仍然可以使用这个工具。Spark shell使得用户可以和Spark集群交互&#xff0c;提交查询&#xff0c;这便于调试&#xff0c;也便于初学者使用…

linux vps 命令,CentOS最常用Linux vps操作命令整理大全

vps用的centos系统&#xff0c;为了方便查看整理了一些Linux常用命令&#xff1b;忘记的时候翻出来看看&#xff0c;不用二次浪费时间东找西找浪费时间&#xff1b;文件和目录:# cd /home 进入 ‘/home’ 目录# cd .. 返回上一级目录# cd ../.. 返回上两级目录# cd – 返回上次…

Java的20年:重大事件的时间表

翻译自: https://www.javacodegeeks.com/2015/12/2-decades-java-timeline-notable-events.html

w10系统自带linux系统,win10下,内置linux系统的安装和体验,你造吗?

原标题&#xff1a;win10下&#xff0c;内置linux系统的安装和体验&#xff0c;你造吗&#xff1f;众所周知&#xff0c;windows系统和linux系统一直是水火不容&#xff0c;而在最新的win10系统却完美兼容了linux系统&#xff0c;但是在默认情况下是关闭的&#xff0c;需要我们…

北风网09.接收普通消息2

该公众号暂时无法提供服务,请稍后再试 转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/6273960.html

中科软测试面试题2019_2019国考成绩今日是否会发布,笔试120能进面不?

2019国考成绩要出来了不&#xff1f;2019国考成绩何时出来&#xff1f;现在已是1月中旬&#xff0c;许多考生对于自己的国考笔试成绩都非常期待&#xff0c;而最近风声四起&#xff0c;搞得考生们人心慌慌&#xff0c;那么2019国考成绩要出来了不&#xff1f;现在我们一起来分析…

C# 数据库连接测试以及备份

现在我们要做一个如图5.1的数据库连接配置&#xff0c;从界面上看有三个功能需要实现&#xff1a;从配置文件中读取数据库连接的相关属性、备份数据库、测试连接。 现在我们就一个一个开始讲解。 图5.1 1.从配置文件中读取数据库连接的相关属性 1) 配置文件中的数据库连接: &l…

Linux程序选择boy糊者girl,linux脚本程序练习-Go语言中文社区

1、编写一个名为iffile程序&#xff0c;它执行时判断/bin目录下date文件是否存在&#xff1f;2、编写一个名为greet的问候程序&#xff0c;执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨&#xff0c;中午到下午六点为下午&#xff0c;下午六点到半夜为晚…

什么是初效过滤器_初效过滤器怎么样 初效过滤器特点介绍【详解】

说起过滤器&#xff0c;我们大家都不陌生。现在环境污染严重&#xff0c;我们大多数家庭都在使用 净水器 、 空气净化器 等家电设备&#xff0c;它们需要依靠过滤器来净化水质和空气&#xff0c;让我们的生活更加健康。不过&#xff0c;您知道初效过滤器安装的步骤是什么吗?下…

组件 模块 插件_播放2 –模块,插件有什么区别?

组件 模块 插件关于Play 2模块和插件似乎有些困惑。 我想这是因为两者经常是同义词。 在Play&#xff08;两个版本-1和2&#xff09;中&#xff0c;存在明显的差异。 在本文中&#xff0c;我将研究什么是插件&#xff0c;如何在Java和Scala中实现插件&#xff0c;以及如何从模块…

云计算hcie贴吧_专业介绍|计算机网络技术

点击蓝字关注我们01专业特色计算机网络技术专业所有在职专任教师都具有高级职称和硕士学位&#xff0c;双师比例为75&#xff05;&#xff1b;在企业核心岗位工作的兼职老师4人。筹备组建华为ICT学院。华为ICT学院是华为公司主导的&#xff0c;面向全球在校大学生传递华为ICT技…

url重写(urlrewrite)的一些系统变量

学php也有3年了&#xff0c;一直对url重写不是很了解&#xff0c;本学用到的话都是百度一下&#xff0c;再复制作简单修改&#xff0c;一些变量的参数都不太了解什么意思&#xff0c;难得今天有时间&#xff0c;做个笔记吧&#xff01; 1&#xff09;可用的一些系统变量&#x…

linux日志自动按天保存,linux实现按天生成日志文件并自动清理

linux实现按天生成日志文件并自动清理前篇文章中讲到如何在Linux crontab创建每秒执行的方法&#xff0c;高人可能早意识到日志文件没做处理&#xff0c;假如没人工处理久了日后越来越大肯定会出现问题&#xff0c;当然人工处理也不现实。为了解决这个问题&#xff0c;所以有了…

使用Java成功生成代码的7个技巧

作为介绍&#xff0c;最近我有点安静&#xff0c;部分原因是我一直在忙于Chronicle-FIX的工作 。 这是Chronicle-Enterprise套件中的一个新的超低延迟库&#xff0c;我们证明了该库可以在低个位数微秒内解析和存储消息。 当然&#xff0c;它利用了我们的开源产品Chronicle-Queu…

通达信版弘历软件指标_中线公式指标(副图 通达信 贴图)明确文字提示,辅助判断中线走势下载_通达信公式...

中线公式指标(副图 通达信 贴图)明确文字提示&#xff0c;辅助判断中线走势下载详细说明第一股票公式网()告诉您&#xff1a;当前正要下载&#xff1a;中线公式指标(副图 通达信 贴图)明确文字提示&#xff0c;辅助判断中线走势下载 中线公式指标(副图 通达信 贴图)明确文字提示…

新巴巴运动网 项目第十一天

新巴巴运动网 项目第十一天 今天内容 购物车 创建购物车对象 加入购物车分析开发流程 加入购物车代码开发 同款商品合并(非登陆时、已登陆时) 去购物车结算分析开发流程 去购物车结算代码开发 创建购物车对象 购物项 Sku 是否有货 数量 购物车 List<购物项> 结果集 小计…

linux查看apache配置文件路径,linux 命令行下查看apache配置文件httpd.conf位置

如何用linux命令查看apache配置文件httpd.conf位置&#xff0c;说明如下输入命令httpd -V输出结果[rootMyServer ~]# httpd -VServer version: Apache/2.2.15 (Unix)Server built: Dec 15 2015 15:47:31Servers Module Magic Number: 20051115:25Server loaded: APR 1.3.9, APR…

qt linux webservice,Qt实现访问WebService

之前也许是因为根本不用的原因吧,,,根本没有想过Qt访问WebService的方式....要解决这个问题,因为Qt现行版没有提供直接访问的类库...首先是一些必备知识,我连的服务器是用VS2010建的只有 string helloworld() 和string getHello(string str)两个接口的iis服务器.针对这个我一共…