摘要:Async Method与Exception

第一、在方法内部的程序可以有一个以上的await。

第二、只要方法内部的程序包含await,方法的前方就必须有async修饰。

第三、await expression意指将await操作符套用在Task或者Task之前。

第四、await不可已出现在例外处理的Catch区块或者Finally区块中。

第五、当程序已经被执行至async方法的内部时,遇到await会暂停方法的执行,并且先执行await之后的异步方法,待await之后的异步方法执行完毕与返回Task或者Task之后,再解除之前的暂停执行,并且由之前暂停点继续执行。

第六、倘若在前一行程序中,将异步方法回传的Task或者Task先指定给予一个暂时的Task或者Task,然后在下一行的程序中,运用await expression将await操作符套用在前一行的暂时的Task或者Task,则必须使用Try区块才能捕捉Task或者Task的例外消息。

第七、在Task.WhenAll()中,仅能捕捉到一个例外,而且无法事先预测可以捕捉到哪一个例外。

第八、Task的属性IsCanceled设为True,或者属性IsFaulted设为True时,皆会抛出例外,IsCanceled设为True代表取消作业,IsFaulted设为True代表发错误。

参考数据:

[1]try-catch (C# Reference)
http://msdn.microsoft.com/en-us/library/0yd65esw.aspx

原文:大专栏  摘要:Async Method与Exception

原文地址:https://www.cnblogs.com/chinatrump/p/11458326.html

时间: 2024-08-30 11:38:57

摘要:Async Method与Exception的相关文章

exception disappear when forgot to await an async method

https://github.com/aspnet/AspNetWebStack/issues/235 https://stackoverflow.com/questions/5383310/catch-an-exception-thrown-by-an-async-void-method 如果异常发生在1个async方法中,而调用这个方法的地方,没有做await.那么异常就会消失. It's somewhat weird to read but yes, the exception will

await and async

Most people have already heard about the new “async” and “await” functionality coming in Visual Studio 11. This is Yet Another Introductory Post. First, the punchline: Async will fundamentally change the way most code is written. Yup, I believe async

Async All the Way

Asynchronous code reminds me of the story of a fellow who mentioned that the world was suspended in space and was immediately challenged by an elderly lady claiming that the world rested on the back of a giant turtle. When the man enquired what the t

进阶篇:以IL为剑,直指async/await

接上篇:30分钟?不需要,轻松读懂IL,这篇主要从IL入手来理解async/await的工作原理. 先简单介绍下async/await,这是.net 4.5引入的语法糖,配合Task使用可以非常优雅的写异步操作代码,它本身并不会去创建一个新线程,线程的工作还是由Task来做,async/await只是让开发人员以直观的方式写异步操作代码,而不像以前那样到处都是callback或事件. async/await IL翻译 先写个简单的例子: 1 using System; 2 using Syste

深入理解Async/Await(转)

C# 5 Async/Await 语法特性,极大地简化了异步编程,但我们知道,异步编程的基本原理并没有发生根本改变.也就是说,当一些复杂的东西看起来很简单时,它通常意味着有一些有趣的事情在背后发生.在计算机程序设计语言领域,我们把这些本身很复杂但看起来很简单的语言特性称为语法糖,通常情况下,我们并不需要深入理解语法糖是怎么被一层一层包裹起来的,但是,最近我在使用.NET Core实现MySQL协议过程中,需要实现一个Awaitable Socket,所以我需要知道Async/Await背后到底发

Async 与 Await 关键字研究

1        Aynsc 和 Await 关键字的研究 在 .NET 4.0 以后,基于 Task 的异步编程模式大行其道,因其大大简化了异步编程所带来的大量代码工作而深受编程人员的欢迎,如果你曾经使用过 APM(基于 IAsyncResult) 和 EAP( 基于 event/delegate),那么你一定感受颇深. 而随之而来.NET 4.5 的两个关键字 async 和 await 又使得异步编程如编写顺序的代码一样容易,特别是 async 对 委托(Lamda/LINQ 表达式,匿名

async/await 的基本实现和 .NET Core 2.1 中相关性能提升

前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 CTO 以及主管的个人能力也是分不开的),业界前沿的技术概念也都能在上手的项目中出现.所以虽然现在团队仍然处于疾速的发展中,也存在一些奇奇怪怪的事情,工作内容也算有紧有松,但是总体来说也算有苦有乐,不是十分排斥. 其实这样的环境有些类似于笔者心中的"圣地" Thoughtworks 的

异步任务spring @Async注解源码解析

1.引子 开启异步任务使用方法: 1).方法上加@Async注解 2).启动类或者配置类上@EnableAsync 2.源码解析 虽然spring5已经出来了,但是我们还是使用的spring4,本文就根据spring-context-4.3.14.RELEASE.jar来分析源码. 2.1.@Async org.springframework.scheduling.annotation.Async 源码注释翻译: 1 /** 2 * Annotation that marks a method

小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理

关于上传下载文件(图片等),涉及到UI进度条的显示,c#中 System.IProgress提供了相应的api. namespace System { // // 摘要: // 定义进度更新的提供程序. // // 类型参数: // T: // 进度更新值的类型.此类型参数是逆变.即可以使用指定的类型或派生程度更低的类型.有关协变和逆变的详细信息,请参阅 泛型中的协变和逆变. public interface IProgress<in T> { // // 摘要: // 报告进度更新. //