譯者序 IX前言 XI第1 章 并發(fā)編程概述 11.1 并發(fā)編程簡介 11.2 異步編程簡介 31.3 并行編程簡介 71.4 響應式編程簡介 91.5 數據流簡介 111.6 多線程編程簡介 131.7 并發(fā)編程的集合 131.8 現代設計 141.9 技術要點總結 14第2 章 異步編程基礎 172.1 暫停一段時間 182.2 返回完成的任務 192.3 報告進度 212.4 等待一組任務完成 222.5 等待任意一個任務完成 252.6 任務完成時的處理 262.7 避免上下文延續(xù) 292.8 處理async Task 方法的異?! ?02.9 處理async void 方法的異常 32第3 章 并行開發(fā)的基礎 353.1 數據的并行處理 353.2 并行聚合 373.3 并行調用 383.4 動態(tài)并行 403.5 并行LINQ 41第4 章 數據流基礎 434.1 鏈接數據流塊 444.2 傳遞出錯信息 454.3 斷開鏈接 474.4 限制流量 484.5 數據流塊的并行處理 484.6 創(chuàng)建自定義數據流塊 49第5 章 Rx 基礎 515.1 轉換.NET 事件 525.2 發(fā)通知給上下文 545.3 用窗口和緩沖對事件分組 565.4 用限流和抽樣抑制事件流 585.5 超時 60第6 章 測試技巧 636.1 async 方法的單元測試 646.2 預計失敗的async 方法的單元測試 656.3 async void 方法的單元測試 676.4 數據流網格的單元測試 686.5 Rx Observable 對象的單元測試 706.6 用虛擬時間測試Rx Observable 對象 72第7 章 互操作 757.1 用async 代碼封裝Async 方法與Completed 事件 757.2 用async 代碼封裝Begin/End 方法 777.3 用async 代碼封裝所有異步操作 787.4 用async 代碼封裝并行代碼 807.5 用async 代碼封裝Rx Observable 對象 807.6 用Rx Observable 對象封裝async 代碼 827.7 Rx Observable 對象和數據流網格 83第8 章 集合 858.1 不可變棧和隊列 878.2 不可變列表 898.3 不可變Set 集合 918.4 不可變字典 938.5 線程安全字典 948.6 阻塞隊列 968.7 阻塞棧和包 998.8 異步隊列 1008.9 異步棧和包 1028.10 阻塞/ 異步隊列 104第9 章 取消 1099.1 發(fā)出取消請求 1109.2 通過輪詢響應取消請求 1129.3 超時后取消 1149.4 取消async 代碼 1159.5 取消并行代碼 1169.6 取消響應式代碼 1179.7 取消數據流網格 1199.8 注入取消請求 1209.9 與其他取消體系的互操作 122第10 章 函數式OOP 12510.1 異步接口和繼承 12510.2 異步構造:工廠 12710.3 異步構造:異步初始化模式 12910.4 異步屬性 13210.5 異步事件 13410.6 異步銷毀 137第11 章 同步 14311.1 阻塞鎖 14811.2 異步鎖 14911.3 阻塞信號 15111.4 異步信號 15211.5 限流 154第12 章 調度 15712.1 調度到線程池 15712.2 任務調度器 15912.3 調度并行代碼 16112.4 用調度器實現數據流的同步 161第13 章 實用技巧 16313.1 初始化共享資源 16313.2 Rx 延遲求值 16513.3 異步數據綁定 16613.4 隱式狀態(tài) 168封面介紹 170