封面图
目录
- 前言
- 第1章线程基础1
- 1.1简介1
- 1.2使用C#创建线程2
- 1.2.1准备工作2
- 1.2.2实现方式2
- 1.2.3工作原理4
- 1.3暂停线程4
- 1.3.1准备工作5
- 1.3.2实现方式5
- 1.3.3工作原理5
- 1.4线程等待6
- 1.4.1准备工作6
- 1.4.2实现方式6
- 1.4.3工作原理7
- 1.5终止线程7
- 1.5.1准备工作7
- 1.5.2实现方式7
- 1.5.3工作原理8
- 1.6检测线程状态8
- 1.6.1准备工作8
- 1.6.2实现方式8
- 1.6.3工作原理9
- 1.7线程优先级10
- 1.7.1准备工作10
- 1.7.2实现方式10
- 1.7.3工作原理11
- 1.8前台线程和后台线程12
- 1.8.1准备工作12
- 1.8.2实现方式12
- 1.8.3工作原理13
- 1.9向线程传递参数13
- 1.9.1准备工作13
- 1.9.2实现方式13
- 1.9.3工作原理15
- 1.9.4更多信息15
- 1.10使用C#中的lock关键字16
- 1.10.1准备工作16
- 1.10.2实现方式16
- 1.10.3工作原理18
- 1.11使用Monitor类锁定资源18
- 1.11.1准备工作18
- 1.11.2实现方式18
- 1.11.3工作原理20
- 1.12处理异常20
- 1.12.1准备工作20
- 1.12.2实现方式21
- 1.12.3工作原理22
- 第2章线程同步23
- 2.1简介23
- 2.2执行基本的原子操作24
- 2.2.1准备工作24
- 2.2.2实现方式24
- 2.2.3工作原理26
- 2.3使用Mutex类27
- 2.3.1准备工作27
- 2.3.2实现方式27
- 2.3.3工作原理27
- 2.4使用SemaphoreSlim类28
- 2.4.1准备工作28
- 2.4.2实现方式28
- 2.4.3工作原理29
- 2.4.4更多信息29
- 2.5使用AutoResetEvent类29
- 2.5.1准备工作30
- 2.5.2实现方式30
- 2.5.3工作原理31
- 2.6使用ManualResetEventSlim类31
- 2.6.1准备工作31
- 2.6.2实现方式31
- 2.6.3工作原理32
- 2.6.4更多信息33
- 2.7使用CountDownEvent类33
- 2.7.1准备工作33
- 2.7.2实现方式33
- 2.7.3工作原理34
- 2.8使用Barrier类34
- 2.8.1准备工作34
- 2.8.2实现方式34
- 2.8.3工作原理35
- 2.9使用ReaderWriterLockSlim类35
- 2.9.1准备工作36
- 2.9.2实现方式36
- 2.9.3工作原理37
- 2.10使用SpinWait类38
- 2.10.1准备工作38
- 2.10.2实现方式38
- 2.10.3工作原理39
- 第3章使用线程池40
- 3.1简介40
- 3.2在线程池中调用委托41
- 3.2.1准备工作42
- 3.2.2实现方式42
- 3.2.3工作原理43
- 3.3向线程池中放入异步操作44
- 3.3.1准备工作44
- 3.3.2实现方式44
- 3.3.3工作原理45
- 3.4线程池与并行度45
- 3.4.1准备工作46
- 3.4.2实现方式46
- 3.4.3工作原理47
- 3.5实现一个取消选项47
- 3.5.1准备工作47
- 3.5.2实现方式48
- 3.5.3工作原理49
- 3.6在线程池中使用等待事件处理器及超时50
- 3.6.1准备工作50
- 3.6.2实现方式50
- 3.6.3工作原理51
- 3.6.4更多信息51
- 3.7使用计时器52
- 3.7.1准备工作52
- 3.7.2实现方式52
- 3.7.3工作原理53
- 3.8使用BackgroundWorker组件53
- 3.8.1准备工作53
- 3.8.2实现方式53
- 3.8.3工作原理55
- 第4章使用任务并行库56
- 4.1简介56
- 4.2创建任务57
- 4.2.1准备工作58
- 4.2.2实现方式58
- 4.2.3工作原理59
- 4.3使用任务执行基本的操作59
- 4.3.1准备工作60
- 4.3.2实现方式60
- 4.3.3工作原理61
- 4.4组合任务61
- 4.4.1准备工作61
- 4.4.2实现方式61
- 4.4.3工作原理63
- 4.5将APM模式转换为任务63
- 4.5.1准备工作64
- 4.5.2实现方式64
- 4.5.3工作原理66
- 4.6将EAP模式转换为任务66
- 4.6.1准备工作66
- 4.6.2实现方式67
- 4.6.3工作原理68
- 4.7实现取消选项68
- 4.7.1准备工作68
- 4.7.2实现方式68
- 4.7.3工作原理69
- 4.8处理任务中的异常69
- 4.8.1准备工作70
- 4.8.2实现方式70
- 4.8.3工作原理71
- 4.8.4更多信息71
- 4.9并行运行任务72
- 4.9.1准备工作72
- 4.9.2实现方式72
- 4.9.3工作原理73
- 4.10使用TaskScheduler配置任务的执行73
- 4.10.1准备工作73
- 4.10.2实现方式74
- 4.10.3工作原理76
- 第5章使用C# 5.078
- 5.1简介78
- 5.2使用await操作符获取异步任务结果80
- 5.2.1准备工作80
- 5.2.2实现方式80
- 5.2.3工作原理81
- 5.3在lambda表达式中使用await操作符82
- 5.3.1准备工作82
- 5.3.2实现方式82
- 5.3.3工作原理83
- 5.4对连续的异步任务使用await操作符83
- 5.4.1准备工作84
- 5.4.2实现方式84
- 5.4.3工作原理85
- 5.5对并行执行的异步任务使用await操作符86
- 5.5.1准备工作86
- 5.5.2实现方式86
- 5.5.3工作原理87
- 5.6处理异步操作中的异常88
- 5.6.1准备工作88
- 5.6.2实现方式88
- 5.6.3工作原理89
- 5.7避免使用捕获的同步上下文90
- 5.7.1准备工作90
- 5.7.2实现方式90
- 5.7.3工作原理92
- 5.8使用async void方法93
- 5.8.1准备工作93
- 5.8.2实现方式93
- 5.8.3工作原理95
- 5.9设计一个自定义的awaitable类型96
- 5.9.1准备工作96
- 5.9.2实现方式96
- 5.9.3工作原理97
- 5.10对动态类型使用await98
- 5.10.1准备工作99
- 5.10.2实现方式99
- 5.10.3工作原理101
- 第6章使用并发集合102
- 6.1简介102
- 6.2使用ConcurrentDictionary103
- 6.2.1准备工作104
- 6.2.2实现方式104
- 6.2.3工作原理105
- 6.3使用ConcurrentQueue实现异步处理105
- 6.3.1准备工作106
- 6.3.2实现方式106
- 6.3.3工作原理107
- 6.4改变ConcurrentStack异步处理顺序108
- 6.4.1准备工作108
- 6.4.2实现方式108
- 6.4.3工作原理109
- 6.5使用ConcurrentBag创建一个可扩展的爬虫110
- 6.5.1准备工作110
- 6.5.2实现方式110
- 6.5.3工作原理113
- 6.6使用BlockingCollection进行异步处理113
- 6.6.1准备工作113
- 6.6.2实现方式113
- 6.6.3工作原理115
- 第7章使用PLINQ116
- 7.1简介116
- 7.2使用Parallel类117
- 7.2.1准备工作118
- 7.2.2实现方式118
- 7.2.3工作原理119
- 7.3并行化LINQ查询119
- 7.3.1准备工作119
- 7.3.2实现方式120
- 7.3.3工作原理122
- 7.4调整PLINQ查询的参数122
- 7.4.1准备工作122
- 7.4.2实现方式123
- 7.4.3工作原理124
- 7.5处理PLINQ查询中的异常125
- 7.5.1准备工作125
- 7.5.2实现方式125
- 7.5.3工作原理126
- 7.6管理PLINQ查询中的数据分区126
- 7.6.1准备工作127
- 7.6.2实现方式127
- 7.6.3工作原理128
- 7.7为PLINQ查询创建一个自定义的聚合器129
- 7.7.1准备工作129
- 7.7.2实现方式129
- 7.7.3工作原理131
- 第8章使用Reactive Extensions132
- 8.1简介132
- 8.2将普通集合转换为异步的可观察集合133
- 8.2.1准备工作133
- 8.2.2实现方式133
- 8.2.3工作原理135
- 8.3编写自定义的可观察对象136
- 8.3.1准备工作136
- 8.3.2实现方式136
- 8.3.3工作原理138
- 8.4使用Subject138
- 8.4.1准备工作138
- 8.4.2实现方式138
- 8.4.3工作原理140
- 8.5创建可观察的对象141
- 8.5.1准备工作141
- 8.5.2实现方式141
- 8.5.3工作原理143
- 8.6对可观察的集合使用LINQ查询144
- 8.6.1准备工作144
- 8.6.2实现方式144
- 8.6.3工作原理145
- 8.7使用Rx创建异步操作146
- 8.7.1准备工作146
- 8.7.2实现方式146
- 8.7.3工作原理148
- 第9章使用异步I/O150
- 9.1简介150
- 9.2异步地使用文件152
- 9.2.1准备工作152
- 9.2.2实现方式152
- 9.2.3工作原理154
- 9.3编写一个异步的HTTP服务器和客户端155
- 9.3.1准备工作155
- 9.3.2实现方式155
- 9.3.3工作原理157
- 9.4异步操作数据库157
- 9.4.1准备工作157
- 9.4.2实现方式158
- 9.4.3工作原理160
- 9.5异步调用WCF服务161
- 9.5.1准备工作161
- 9.5.2实现方式161
- 9.5.3工作原理164
- 第10章并行编程模式165
- 10.1简介165
- 10.2实现惰性求值的共享状态166
- 10.2.1准备工作166
- 10.2.2实现方式166
- 10.2.3工作原理169
- 10.3使用BlockingCollection实现并行管道170
- 10.3.1准备工作170
- 10.3.2实现方式170
- 10.3.3工作原理174
- 10.4使用TPL数据流实现并行管道175
- 10.4.1准备工作175
- 10.4.2实现方式175
- 10.4.3工作原理177
- 10.5使用PLINQ实现Map/Reduce模式178
- 10.5.1准备工作178
- 10.5.2实现方式178
- 10.5.3工作原理181
- 第11章更多信息183
- 11.1简介183
- 11.2在Windows商店应用中使用计时器184
- 11.2.1准备工作184
- 11.2.2实现方式184
- 11.2.3工作原理188
- 11.3在通常的应用程序中使用WinRT189
- 11.3.1准备工作189
- 11.3.2实现方式189
- 11.3.3工作原理191
- 11.4在Windows商店应用中使用BackgroundTask192
- 11.4.1准备工作192
- 11.4.2实现方式192
- 11.4.3工作原理197