C# 併發編程經典實例, 2/e Concurrency in C# Cookbook: Asynchronous, Parallel, and Multithreaded Programming 2/e

Stephen Cleary

買這商品的人也買了...

商品描述

編輯推薦
如今的用戶對響應式界面的期望越來越高,開發人員不得不努力賦予應用程序越來越強的能力,併發編程兼顧了這兩大趨勢。對現代應用程序來說,併發編程迅速地成為了不可或缺的需求。然而,眾多開發人員依然認為併發編程富有挑戰。
如果你曾在併發編程十分複雜的年代里受挫,那麼本書能幫助你重拾勇氣。或許我們永遠無法將併發編程形容為「小菜一碟」,但藉助現代程序庫以及.NET和C# 8.0的語言特性,你一定不會再如過去那般舉步維艱。你將通過本書掌握以下內容。
- 面向非同步編程的async和await
- 利用非同步流讓代碼更強
- 利用.NET TPL探索并行編程
- 利用.NET TPL數據流庫創建數據流管道
- 了解基於LINQ的System.Reactive
- 利用線程安全且不可變的集合
- 使用併發代碼進行單元測試
- 讓線程池為己所用
- 探索如何整合併發方法
- 併發代碼中的取消功能支持
- 深入理解支持非同步的面向對象編程
- 辨識舊式非同步代碼,併為其編寫適配器
【讚譽】
「計算機領域的下一件大事就是普及大型併發編程。開發人員已然擁有了前所未有的力量,但併發編程對多數人來說依舊富有挑戰。斯蒂芬將我們的目光聚焦到這個問題上,並通過易於理解又十分完備的內容,幫助我們更好地理解併發編程、線程、響應式編程模型、并行編程,以及其他相關知識。」
——Scott Hanselman,微軟公司首席項目經理,負責ASP.NET和Azure Web工具
「憑藉涵蓋技術之廣泛,操作指南之實用,這本書無愧學習現代.NET併發編程的理想之選。」
——Jon Skeet,谷歌公司高級軟體工程師
「斯蒂芬·克利里已成為C#非同步編程和併發編程領域的重要專家。這本書清晰、簡練地闡述了這些技術的關鍵切入點和相關原則,能夠幫助開發人員快速入門,並取得成功。」
——Stephen Toub,微軟公司首席架構師

內容簡介
本書全面講解C#併發編程技術,側重於.NET平台上較新、較實用的方法。新版內容全面更新,涉及非同步編程基礎、互操作、集合、常見場景及其處理技巧等,另外新增了關於非同步流的章節。全書分為14章:第1章概覽幾種併發編程技術,包括非同步編程、并行編程、響應式編程、數據流等;第2~6章對這些技術進行詳細介紹;第7~13章深入探討這些技術,內容包括測試技巧、互操作、取消、函數式面向對象編程、同步、調度等;第14章涉及併發編程中的一些常見場景,並配有對應的解決方案。全書共包含近90個配有源代碼的實例,可用於各種應用程序的開發。

作者簡介

斯蒂芬·克利里(Stephen Cleary),C# MVP,在ARM固件領域以及Azure服務平台等方面有著豐富的經驗。他一直投身於研發開源技術,最初致力於Boost C++庫,而後發布了一些自行編寫的庫和工具。

目錄大綱

第 2版讚譽 ix


前言 xi
第 1章 併發概覽 1
1.1 併發入門 1
1.2 非同步編程 3
1.3 并行編程 7
1.4 響應式編程 10
1.5 數據流 12
1.6 多線程編程 14
1.7 併發應用程序集合 14
1.8 現代化設計 15
1.9 技術要點小結 15


第 2章 非同步編程基礎 16
2.1 暫停一段時間 16
2.2 返回已完成的任務 18
2.3 報告進度 20
2.4 等待一組任務完成 22
2.5 等待任意任務完成 24
2.6 在任務完成時處理它們 25
2.7 避免延續的上下文 28
2.8 async Task方法的異常處理 29
2.9 async void方法的異常處理 31
2.10 創建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 創建非同步流 40
3.6 消耗非同步流 42
3.7 對非同步流使用LINQ 44
3.8 非同步流及其取消操作 46


第4章 并行編程基礎 49
4.1 并行處理 49
4.2 并行聚合 51
4.3 并行調用 52
4.4 動態并行 53
4.5 PLINQ 55


第5章 數據流基礎 57
5.1 關聯的塊 57
5.2 傳播錯誤 59
5.3 塊的解耦 60
5.4 塊的節流 61
5.5 塊的并行處理 62
5.6 創建自定義塊 63


第6章 System.Reactive 基礎 65
6.1 轉換.NET事件 65
6.2 向上下文發送通知 68
6.3 使用窗口和緩衝來分組事件數據 70
6.4 通過節流和採樣控制事件流 72
6.5 超時 74


第7章 測試 77
7.1 對async方法進行單元測試 78
7.2 對預期失敗的async方法進行單元測試 80
7.3 對async void方法進行單元測試 82
7.4 對數據流網格進行單元測試 83
7.5 對System.Reactive可觀察對象進行單元測試 84
7.6 通過偽造調度對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 非同步流與數據流網格 98
8.8 System.Reactive可觀察對象和數據流網格 100
8.9 將System.Reactive可觀察對象轉換為非同步流 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 節流隊列 120
9.10 採樣隊列 122
9.11 非同步棧和非同步背包 124
9.12 阻塞非同步隊列 125


第 10章 取消 130
10.1 發起取消請求 131
10.2 通過輪詢來響應取消 133
10.3 因超時而取消 135
10.4 取消async代碼 136
10.5 取消并行代碼 137
10.6 取消System.Reactive代碼 138
10.7 取消數據流網格 140
10.8 注入取消請求 141
10.9 與其他取消系統互操作 143


第 11章 函數式面向對象編程 145
11.1 非同步介面及繼承 145
11.2 非同步構造:工廠 147
11.3 非同步構造:非同步初始化模式 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 節流 170


第 13章 調度 173
13.1 將工作調度到線程池 173
13.2 通過任務調度器執行代碼 174
13.3 調度并行代碼 177
13.4 使用調度器實現數據流同步 177


第 14章 場景 179
14.1 初始化共享資源 179
14.2 System.Reactive延遲計算 182
14.3 非同步數據綁定 183
14.4 隱式狀態 186
14.5 相同的同步代碼和非同步代碼 188
14.6 通過數據流網格實現軌道式編程 190
14.7 節流進度更新 191


附錄A 舊版平台支持 197
附錄B 識別和詮釋非同步模式 201
關於作者 208
關於封面 208