第1章 并发编程概述 1
1.1 并发编程简介 1
1.2 异步编程简介 3
1.3 并行编程简介 7
1.4 响应式编程简介 9
1.5 数据流简介 11
1.6 多线程编程简介 13
1.7 并发编程的集合 13
1.8 现代设计 14
1.9 技术要点总结 14
第2章 异步编程基础 17
2.1 暂停一段时间 18
2.2 返回完成的任务 19
2.3 报告进度 21
2.4 等待一组任务完成 22
2.5 等待任意一个任务完成 25
2.6 任务完成时的处理 26
2.7 避免上下文延续 29
2.8 处理async Task方法的异常 30
2.9 处理async void方法的异常 32
第3章 并行开发的基础 35
3.1 数据的并行处理 35
3.2 并行聚合 37
3.3 并行调用 38
3.4 动态并行 40
3.5 并行LINQ 41
第4章 数据流基础 43
4.1 链接数据流块 44
4.2 传递出错信息 45
4.3 断开链接 47
4.4 限制流量 48
4.5 数据流块的并行处理 48
4.6 创建自定义数据流块 49
第5章 Rx基础 51
5.1 转换NET事件 52
5.2 发通知给上下文 54
5.3 用窗口和缓冲对事件分组 56
5.4 用限流和抽样抑制事件流 58
5.5 超时 60
第6章 测试技巧 63
6.1 async方法的单元测试 64
6.2 预计失败的async方法的单元测试 65
6.3 async void方法的单元测试 67
6.4 数据流网格的单元测试 68
6.5 RxObservable对象的单元测试 70
6.6 用虚拟时间测试RxObservable对象 72
第7章 互操作 75
7.1 用async代码封装Async方法与Completed事件 75
7.2 用async代码封装Begin/End方法 77
7.3 用async代码封装所有异步操作 78
7.4 用async代码封装并行代码 80
7.5 用async代码封装RxObservable对象 80
7.6 用RxObservable对象封装async代码 82
7.7 RxObservable对象和数据流网格 83
第8章 集合 85
8.1 不可变栈和队列 87
8.2 不可变列表 89
8.3 不可变Set集合 91
8.4 不可变字典 93
8.5 线程安全字典 94
8.6 阻塞队列 96
8.7 阻塞栈和包 99
8.8 异步队列 100
8.9 异步栈和包 102
8.1 0阻塞/异步队列 104
第9章 取消 109
9.1 发出取消请求 110
9.2 通过轮询响应取消请求 112
9.3 超时后取消 114
9.4 取消async代码 115
9.5 取消并行代码 116
9.6 取消响应式代码 117
9.7 取消数据流网格 119
9.8 注入取消请求 120
9.9 与其他取消体系的互操作 122
第10章 函数式OOP 125
10.1 异步接口和继承 125
10.2 异步构造:工厂 127
10.3 异步构造:异步初始化模式 129
10.4 异步属性 132
10.5 异步事件 134
10.6 异步销毁 137
第11章 同步 143
11.1 阻塞锁 148
11.2 异步锁 149
11.3 阻塞信号 151
11.4 异步信号 152
11.5 限流 154
第12章 调度 157
12.1 调度到线程池 157
12.2 任务调度器 159
12.3 调度并行代码 161
12.4 用调度器实现数据流的同步 161
第13章 实用技巧 163
13.1 初始化共享资源 163
13.2 Rx延迟求值 165
13.3 异步数据绑定 166
13.4 隐式状态 168
封面介绍 170