15.3.1 声明异步方法和返回类型

         async static void GetStringAsync()
{
using (var client = new HttpClient())
{
Task<string> task = client.GetStringAsync("https://www.baidu.com/");
string result = await task;
}
}

15.3.3 可等待模式

  大量工作都是通过模式来表示的,这有点类似于 foreach 和LINQ查询。为了更清晰地描述
该模式的轮廓,假设存在一些相关的接口(但实际并没有)。稍后我会介绍真实情况,现在先来
看看虚构的接口:

     /// <summary> 为包含返回值的异步操作 建立的虚拟的接口  警告:这些并不存在 自定义的</summary>
public interface IAwaitable<T>
{
IAwaiter<T> GetAwaiter();
} public interface IAwaiter<T> : INotifyCompletion
{
bool IsCompleted { get; }
T GetResult(); //从INotifyCompletion 继承
//void OnCompleted(Action continuation);
} /// <summary> 为没有返回值的异步操作 建立的虚拟的接口 </summary>
public interface IAwaitable
{
IAwaiter GEtAwaiter();
} public interface IAwaiter : INotifyCompletion
{
bool IsCompleted { get; }
void GetResult(); //从INotifyCompletion 继承
//void OnCompleted(Action continuation);
}

  前面讲述了什么样的表达式可以作为 await 关键字的目标,不过整个表达式本身也同样拥有
一个有趣的类型:如果 GetResult() 返回 void ,那么整个 await 表达式就没有类型,而只是一
个独立的语句。否则,其类型与 GetResult() 的返回类型相同。
  例如, Task<TResult>.GetAwaiter() 返回一个 TaskAwaiter<TResult> ,其 GetResult()
方法返回 TResult 。(希望你不会感到奇怪。)根据 await 表达式的类型规则,我们可以编写这样
的代码:

             using (var client = new HttpClient())
{
Task<string> task = client.GetStringAsync("https://www.baidu.com/");
string result = await task;
}

  这里的 await 表达式不会返回任何类型的值,因此不能将其分配给变量,或作为方法实参进
行传递,也不能执行其他任何将表达式作为值的相关操作。
  需要注意的是,由于 Task 和 Task<TResult> 都实现了可等待模式,因此可以在一个异步方
法内调用另一个异步方法:

         public async Task<int> Foo()
{
string bar = await BarAsync();
//显然通常会更复杂
return bar.Length;
}
public async Task<string > BarAsync()
{
//一些异步代码,可能会调用更多异步方法
}

  组合异步操作正是异步特性大放异彩的一个方面。进入异步模式(mode)后,就可以很轻
松地保持这种模式,编写自然流畅的代码。

15.3 Task 语法和语义的更多相关文章

  1. C++ 的二进制语法与语义

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/binary_literal.html */ 二进制的语法 C/C++ 默认数字使用十进制,八进制使用前缀 ...

  2. assertion的语法和语义

    .1) 语法表示 在语法上,为了支持assertion,Java增加了一个关键字assert.它包括两种表达式,分别如下: assert expression1; assert expression1 ...

  3. javaweb基础(15)_jsp基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  4. 15.3 Task 异常

    1. 在等待时拆包异常 在等待任务时,任务出错或取消都将抛出异常,但并不是 AggregateException .大多情 况下为方便起见,抛出的是 AggregateException 中的第一个异 ...

  5. 解读HTML 5新语法 提高语义价值

    HTML 5的新标记 设计者们需要完成的任务是要给HTML 5开发一个更丰富的和更有含义的语义,当然可以想象这种新方案将会是很灵活和很高效的,同时与所有的现代互联网标准相适应.下面就是一些将要在HTM ...

  6. Eigen与Matlab语法及语义辞典

    Eigen为Matlab转换为C++提供了一个简单的语法级别的代码迁移工具. 对一些代码进行了扩充,以便程序由Matlab到Eigen的移植................... 参考链接:http: ...

  7. 15.3 Task Task.Yield和Task.Delay说明

    https://blog.csdn.net/hurrycxd/article/details/79827958 书上看到一个Task.Yield例子,Task.Yield方法创建一个立即返回的awai ...

  8. 15.4 Task 异步匿名函数

    Func<int, Task<int>> func = async x => { Console.WriteLine("starting x={0}" ...

  9. HTML5经典实例——1基础语法和语义

    1指定DOCTYPE 在页面的最开始处指定HTML5 DOCTYPE DOCTYPE是不区分大小写的.可以任意的使用大小写. <!DOCTYPE html> <html lang=& ...

随机推荐

  1. EPEL reporsitory

    在centos 5上yum install git的时候报错说没有git这个package. 这是因为centos的软件策略非常保守,因为它基本就是redhat企业版的copy.所以想在centos5 ...

  2. What you can talk

    data buffer who locked the account hash join cost memory and nested loop do not. How to make it hash ...

  3. 设计模式实例(Lua)笔记之五(Bridge模式)

    1.描写叙述 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都非常赚钱,天天帮我在累加財富,事实上是什么公司我倒是不关心,我关心的是是不是 ...

  4. web压力測试-Web Bench

    1.web bench下载.地址:http://home.tiscali.cz/~cz210552/webbench.html 2.wen bench安装: [root@web111 tmp]#tar ...

  5. [WebView学习之二]:使用Web Apps 支持不同分辨率屏

    上一篇我们学习了(1.[WebView学习之中的一个]:Web Apps简单介绍),今天我们来继续学习. (博客地址:http://blog.csdn.net/developer_jiangqq),转 ...

  6. hdu1035 Robot Motion (DFS)

    Robot Motion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  7. SpringMVC + MyBatis 配置文件

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...

  8. Tool:ProcessOn

    ylbtech-Tool:ProcessOn ProcessOn是一个面向垂直专业领域的作图工具和社交网络,成立于2011年6月并于2012年启动.ProcessOn将全球的专家顾问.咨询机构.BPM ...

  9. yii 面包屑

    Yii的Breadcrumbs 是Yii的路径插件,使用方法: <?php $this->widget('zii.widgets.CBreadcrumbs', array('links'= ...

  10. [转]RDLC 动态列

    本文转自:http://blog.csdn.net/luochengbang/article/details/9964551 很久没有写博客了,关于动态列,国内很少资料有介绍动态列的,所想写点心得给哥 ...