C#并發(fā)編程經(jīng)典實例(第2版)
定 價:79 元
- 作者:斯蒂芬·克利里(Stephen Cleary) 著,韓峰 譯
- 出版時間:2020/11/1
- ISBN:9787115550606
- 出 版 社:人民郵電出版社
- 中圖法分類:TP312
- 頁碼:208
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書全面講解C#并發(fā)編程技術(shù),側(cè)重于.NET平臺上較新、較實用的方法。新版內(nèi)容全面更新,涉及異步編程基礎(chǔ)、互操作、集合、常見場景及其處理技巧等,另外新增了關(guān)于異步流的章節(jié)。全書分為14章:第1章概覽幾種并發(fā)編程技術(shù),包括異步編程、并行編程、響應(yīng)式編程、數(shù)據(jù)流等;第2~6章對這些技術(shù)進行詳細介紹;第7~13章深入探討這些技術(shù),內(nèi)容包括測試技巧、互操作、取消、函數(shù)式面向?qū)ο缶幊、同步、調(diào)度等;第14章涉及并發(fā)編程中的一些常見場景,并配有對應(yīng)的解決方案。全書共包含近90個配有源代碼的實例,可用于各種應(yīng)用程序的開發(fā)。
如今的用戶對響應(yīng)式界面的期望越來越高,開發(fā)人員不得不努力賦予應(yīng)用程序越來越強的能力,并發(fā)編程兼顧了這兩大趨勢。對現(xiàn)代應(yīng)用程序來說,并發(fā)編程迅速地成為了不可或缺的需求。然而,眾多開發(fā)人員依然認為并發(fā)編程富有挑戰(zhàn)。
如果你曾在并發(fā)編程十分復(fù)雜的年代里受挫,那么本書能幫助你重拾勇氣;蛟S我們永遠無法將并發(fā)編程形容為“小菜一碟”,但借助現(xiàn)代程序庫以及.NET和C# 8.0的語言特性,你一定不會再如過去那般舉步維艱。你將通過本書掌握以下內(nèi)容。
- 面向異步編程的async和await
- 利用異步流讓代碼更強
- 利用.NET TPL探索并行編程
- 利用.NET TPL數(shù)據(jù)流庫創(chuàng)建數(shù)據(jù)流管道
- 了解基于LINQ的System.Reactive
- 利用線程安全且不可變的集合
- 使用并發(fā)代碼進行單元測試
- 讓線程池為己所用
- 探索如何整合并發(fā)方法
- 并發(fā)代碼中的取消功能支持
- 深入理解支持異步的面向?qū)ο缶幊?br />- 辨識舊式異步代碼,并為其編寫適配器
【贊譽】
“計算機領(lǐng)域的下一件大事就是普及大型并發(fā)編程。開發(fā)人員已然擁有了前所未有的力量,但并發(fā)編程對多數(shù)人來說依舊富有挑戰(zhàn)。斯蒂芬將我們的目光聚焦到這個問題上,并通過易于理解又十分完備的內(nèi)容,幫助我們更好地理解并發(fā)編程、線程、響應(yīng)式編程模型、并行編程,以及其他相關(guān)知識。”
——Scott Hanselman,微軟公司首席項目經(jīng)理,負責(zé)ASP.NET和Azure Web工具
“憑借涵蓋技術(shù)之廣泛,操作指南之實用,這本書無愧學(xué)習(xí)現(xiàn)代.NET并發(fā)編程的理想之選!
——Jon Skeet,谷歌公司高級軟件工程師
“斯蒂芬·克利里已成為C#異步編程和并發(fā)編程領(lǐng)域的重要專家。這本書清晰、簡練地闡述了這些技術(shù)的關(guān)鍵切入點和相關(guān)原則,能夠幫助開發(fā)人員快速入門,并取得成功。”
——Stephen Toub,微軟公司首席架構(gòu)師
斯蒂芬·克利里(Stephen Cleary),C# MVP,在ARM固件領(lǐng)域以及Azure服務(wù)平臺等方面有著豐富的經(jīng)驗。他一直投身于研發(fā)開源技術(shù),最初致力于Boost C++庫,而后發(fā)布了一些自行編寫的庫和工具。
第 2版贊譽 ix
前言 xi
第 1章 并發(fā)概覽 1
1.1 并發(fā)入門 1
1.2 異步編程 3
1.3 并行編程 7
1.4 響應(yīng)式編程 10
1.5 數(shù)據(jù)流 12
1.6 多線程編程 14
1.7 并發(fā)應(yīng)用程序集合 14
1.8 現(xiàn)代化設(shè)計 15
1.9 技術(shù)要點小結(jié) 15
第 2章 異步編程基礎(chǔ) 16
2.1 暫停一段時間 16
2.2 返回已完成的任務(wù) 18
2.3 報告進度 20
2.4 等待一組任務(wù)完成 22
2.5 等待任意任務(wù)完成 24
2.6 在任務(wù)完成時處理它們 25
2.7 避免延續(xù)的上下文 28
2.8 async Task方法的異常處理 29
2.9 async void方法的異常處理 31
2.10 創(chuàng)建ValueTask 33
2.11 使用ValueTask 34
第3章 異步流 37
3.1 異步流和Task 37
3.2 異步流和IEnumerable 37
3.3 異步流和Task> 38
3.4 異步流和IObservable 38
3.5 創(chuàng)建異步流 40
3.6 消耗異步流 42
3.7 對異步流使用LINQ 44
3.8 異步流及其取消操作 46
第4章 并行編程基礎(chǔ) 49
4.1 并行處理 49
4.2 并行聚合 51
4.3 并行調(diào)用 52
4.4 動態(tài)并行 53
4.5 PLINQ 55
第5章 數(shù)據(jù)流基礎(chǔ) 57
5.1 關(guān)聯(lián)的塊 57
5.2 傳播錯誤 59
5.3 塊的解耦 60
5.4 塊的節(jié)流 61
5.5 塊的并行處理 62
5.6 創(chuàng)建自定義塊 63
第6章 System.Reactive 基礎(chǔ) 65
6.1 轉(zhuǎn)換.NET事件 65
6.2 向上下文發(fā)送通知 68
6.3 使用窗口和緩沖來分組事件數(shù)據(jù) 70
6.4 通過節(jié)流和采樣控制事件流 72
6.5 超時 74
第7章 測試 77
7.1 對async方法進行單元測試 78
7.2 對預(yù)期失敗的async方法進行單元測試 80
7.3 對async void方法進行單元測試 82
7.4 對數(shù)據(jù)流網(wǎng)格進行單元測試 83
7.5 對System.Reactive可觀察對象進行單元測試 84
7.6 通過偽造調(diào)度對System.Reactive可觀察對象進行單元測試 86
第8章 互操作 90
8.1 異步包裝“已完成”事件和異步方法 90
8.2 異步包裝Begin方法和End方法 92
8.3 異步包裝任意對象 93
8.4 異步包裝并行代碼 94
8.5 異步包裝System.Reactive可觀察對象 95
8.6 用于異步代碼的System.Reactive可觀察包裝器 96
8.7 異步流與數(shù)據(jù)流網(wǎng)格 98
8.8 System.Reactive可觀察對象和數(shù)據(jù)流網(wǎng)格 100
8.9 將System.Reactive可觀察對象轉(zhuǎn)換為異步流 101
第9章 集合 104
9.1 不可變的棧和隊列 105
9.2 不可變列表 108
9.3 不可變set 109
9.4 不可變字典 111
9.5 線程安全的字典 113
9.6 阻塞隊列 115
9.7 阻塞棧和阻塞背包 116
9.8 異步隊列 117
9.9 節(jié)流隊列 120
9.10 采樣隊列 122
9.11 異步棧和異步背包 124
9.12 阻塞異步隊列 125
第 10章 取消 130
10.1 發(fā)起取消請求 131
10.2 通過輪詢來響應(yīng)取消 133
10.3 因超時而取消 135
10.4 取消async代碼 136
10.5 取消并行代碼 137
10.6 取消System.Reactive代碼 138
10.7 取消數(shù)據(jù)流網(wǎng)格 140
10.8 注入取消請求 141
10.9 與其他取消系統(tǒng)互操作 143
第 11章 函數(shù)式面向?qū)ο缶幊?145
11.1 異步接口及繼承 145
11.2 異步構(gòu)造:工廠 147
11.3 異步構(gòu)造:異步初始化模式 149
11.4 異步屬性 152
11.5 異步事件 154
11.6 異步丟棄 156
第 12章 同步 160
12.1 阻塞鎖 164
12.2 異步鎖 166
12.3 阻塞信號 168
12.4 異步信號 169
12.5 節(jié)流 170
第 13章 調(diào)度 173
13.1 將工作調(diào)度到線程池 173
13.2 通過任務(wù)調(diào)度器執(zhí)行代碼 174
13.3 調(diào)度并行代碼 177
13.4 使用調(diào)度器實現(xiàn)數(shù)據(jù)流同步 177
第 14章 場景 179
14.1 初始化共享資源 179
14.2 System.Reactive延遲計算 182
14.3 異步數(shù)據(jù)綁定 183
14.4 隱式狀態(tài) 186
14.5 相同的同步代碼和異步代碼 188
14.6 通過數(shù)據(jù)流網(wǎng)格實現(xiàn)軌道式編程 190
14.7 節(jié)流進度更新 191
附錄A 舊版平臺支持 197
附錄B 識別和詮釋異步模式 201
關(guān)于作者 208
關(guān)于封面 208