C# 使用Awaiter
可以对任何提供 GetAwaiter 方法并返回 awaiter 的对象使用 async 关键字。awaiter 用 OnCompleted 方法实现 INotifyCompletion 接口。此方法在任务完成时调用。下面的代码片段不是在任务中使用 await,而是使用任务的 GetAwaiter 方法。Task 类的 GetAwaiter 返回一个 TaskAwaiter。使用 OnCompleted 方法,分配一个在任务完成时调用的本地函数:
private static void CallerWithAwaiter()
{TraceThreadAndTask($"starting {nameof(CallerWithAwaiter)}");TaskAwaiter<string> awaiter = GreetingAsync("Matthias").GetAwaiter();awaiter.OnCompleted(OnCompleteAwaiter);void OnCompleteAwaiter(){Console.WriteLine(awaiter.GetResult());TraceThreadAndTask($"ended {nameof(CallerWithAwaiter)}");}
}
运行应用程序时,结果类似于你使用 wait 关键字的情形:
starting CallerWithAwaiter in thread 2 and no task
running GreetingAsync in thread 3 and task 1
running Greeting in thread 3 and task 1
Hello,Matthias
ended CallerWithAwaiter in thread 3 and no task
编译器把 await 关键字后的所有代码放进 OnCompleted 方法的代码块中来转换 await 关键字。
C# 使用Awaiter相关推荐
- C# 5.0中引入了async 和 await
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: [csharp] view plaincopy public class MyClass { p ...
- C# Task 循环任务_理解C#中的ValueTask
英文:devblogs.microsoft.com 译文:cnblogs.com/xiaoxiaotank/p/13206569.html 译者:xiaoxiaotank 前言 Task类是在.NET ...
- 为所有服务器端代码调用ConfigureAwait的最佳实践
本文翻译自:Best practice to call ConfigureAwait for all server-side code When you have server-side code ( ...
- async/await 的基本实现和 .NET Core 2.1 中相关性能提升
前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 ...
- 关于Async与Await的FAQ
=============C#.Net 篇目录============== 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰 ...
- Java设计模式之创建型:建造者模式
一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...
- 14.并发与异步 - 2.任务Task -《果壳中的c#》
线程是创建并发的底层工具,因此具有一定的局限性. 没有简单的方法可以从联合(Join)线程得到"返回值".因此必须创建一些共享域.当抛出一个异常时,捕捉和处理异常也是麻烦的. 线程 ...
- 15.5.2 【Task实现细节】骨架方法的结构
尽管骨架方法中的代码非常简单,但它暗示了状态机的职责.代码清单15-11生成的骨架方 法如下所示: 1 [DebuggerStepThrough] 2 [AsyncStateMachine(typeo ...
- 浅谈async、await关键字 = 深谈async、await关键字
前言 之前写过有关异步的文章,对这方面一直比较弱,感觉还是不太理解,于是会花点时间去好好学习这一块,我们由浅入深,文中若有叙述不稳妥之处,还请批评指正. 话题 (1)是不是将方法用async关键字标识 ...
最新文章
- 创业记——个人电脑、服务器选型
- 为什么redis取出来是null_跳表:为什么Redis一定要用跳表来实现有序集合
- iccar conference oral presentation
- 泛型算法STL中的迭代器,泛型算法,萃取机的一个实现案例
- SQL:REGEXP
- 在线视频常见加密方式及安全性透析
- react学习(27)---antdesign设置默认值
- Apollo进阶课程 ⑮丨Apollo自动定位技术详解—百度无人车定位技术
- MySQL进阶路:从小工到专家的必读书籍和必备工具
- Atitit 语义网的实现技术 目录 1. 语义网概念及技术综述	1 2. 图2-1 语义网的体系结构	2 2.1. 第1层:基础层,主要包含Unicode和URI(Uniform resource
- linux下分析prn文件,linux专题一之文件描述符、重定向、管道符、tee命令
- java生成pdf417条形码_python生成417条形码(PDF417)
- 使用electron开发了一个excel对比工具
- 【postgres】postgres 数据库迁移
- IC基础知识3-输入阻抗和输出阻抗
- python字符串结束的标志_python-7-字符串的操作_方法_format_列表的操作
- 【代理知识】绝对值得珍藏!(转)
- vscode中切换远程分支
- 下载webStorm,nodejs,git并简单配置,为JavaScript做准备
- Linux脚本的制作命令
热门文章
- Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合
- Windows7下注册OCX的注意事项
- python pack unpack_golang 仿python pack/unpack
- CentOS系统更换yum源(repomd.xml not found解决方案)
- jQuery之Ajax
- Spring boot整合Mongodb
- JSON 解析的两种方法
- 面向对象——概念(成员变量、静态变量、成员方法、静态方法、垃圾回收机制、重载、包)...
- 02 JRE与JDK
- [原] XAF How to implement a custom attribute to customize the Application Model