⇐ Назад

Оглавление

Предисловие..............................................................................................10

Для кого написана эта книга........................................................................11
Почему я написал эту книгу .........................................................................12
Типографские соглашения ...........................................................................13
Структура книги...........................................................................................13
Благодарности .............................................................................................14
От издательства...........................................................................................15
Глава 1. Конкурентность: общие сведения.......................................................16
Знакомство с конкурентностью ....................................................................16
Введение в асинхронное программирование ...............................................19
Введение в параллельное программирование .............................................25
Введение в реактивное программирование (Rx)...........................................30
Введение в Dataflow.....................................................................................32
Введение в многопоточное программирование.............................................35
Коллекции для конкурентных приложений...................................................36
Современная разработка..............................................................................37
О ключевых технологиях кратко ..................................................................38
Глава 2. Основы async .....................................................................................39
2.1. Приостановка на заданный период времени..........................................39
2.2. Возвращение завершенных задач..........................................................42
2.3. Передача информации о ходе выполнения операции ............................45
2.4. Ожидание завершения группы задач.....................................................47
2.5. Ожидание завершения любой задачи....................................................50
2.6. Обработка задач при завершении .........................................................52
2.7. Обход контекста при продолжении........................................................56
2.8. Обработка исключений из методов async Task.......................................57
2.9. Обработка исключений из методов async void .......................................59
2.10. Создание ValueTask..............................................................................62
2.11. Потребление ValueTask ........................................................................64
Глава 3. Асинхронные потоки ..........................................................................68
Асинхронные потоки и Task<T> ..................................................................68
Асинхронные потоки и IEnumerable<T>.......................................................69
Асинхронные потоки и Task<IEnumerable<T>>............................................69
Асинхронные потоки и IObservable<T>........................................................70
Итоги ..........................................................................................................70
3.1. Создание асинхронных потоков.............................................................72
3.2. Потребление асинхронных потоков .......................................................75
3.3. Использование LINQ с асинхронными потоками.....................................77
3.4. Асинхронные потоки и отмена...............................................................81
Глава 4. Основы параллельного программирования.........................................85
4.1. Параллельная обработка данных...........................................................85
4.2. Параллельное агрегирование................................................................88
4.3. Параллельный вызов.............................................................................90
4.4. Динамический параллелизм ..................................................................91
4.5. Parallel LINQ ..........................................................................................94
Глава 5. Основы Dataflow.................................................................................97
5.1. Связывание блоков................................................................................97
5.2. Распространение ошибок.......................................................................99
5.3. Удаление связей между блоками.........................................................102
5.4. Регулирование блоков.........................................................................103
5.5. Параллельная обработка с блоками потока данных.............................104
5.6. Создание собственных блоков.............................................................106
Глава 6. Основы System.Reactive....................................................................108
6.1. Преобразование событий .NET.............................................................109
6.2. Отправка уведомлений контексту........................................................112
6.3. Группировка данных событий с использованием Window и Buffer........115
6.4. Контроль потоков событий посредством регулировки и выборки.........118
6.5. Тайм-ауты ...........................................................................................120
Глава 7. Тестирование...................................................................................124
7.1. Модульное тестирование async-методов..............................................125
7.2. Асинхронные методы модульного тестирования,
которые не должны проходить...................................................................128
7.3. Модульное тестирование методов async void .......................................131
7.4. Модульное тестирование сетей потоков данных ..................................132
7.5. Модульное тестирование наблюдаемых объектов System.Reactive ......134
7.6. Модульное тестирование наблюдаемых объектов System.Reactive
с использованием имитации планирования................................................137
Глава 8. Взаимодействие ...............................................................................142
8.1. Асинхронные обертки для «Async»-методов
с «Completed»-событиями ..........................................................................142
8.2. Асинхронные обертки для методов «Begin/End»..................................144
8.3. Асинхронные обертки для чего угодно ................................................146
8.4. Асинхронные обертки для параллельного кода ...................................148
8.5. Асинхронные обертки для наблюдаемых объектов System.Reactive .....149
8.6. Наблюдаемые обертки для асинхронного кода в System.Reactive ........151
8.7. Асинхронные потоки и сети потоков данных........................................153
8.8. Наблюдаемые объекты System.Reactive Observables
и сети потока данных ................................................................................156
8.9. Преобразование наблюдаемых объектов System.Reactive
в асинхронные потоки................................................................................158
Глава 9. Коллекции........................................................................................162
9.1. Неизменяемые стеки и очереди...........................................................164
9.2. Неизменяемые списки .........................................................................167
9.3. Неизменяемые множества ..................................................................169
9.4. Неизменяемые словари .......................................................................172
9.5. Потокобезопасные словари .................................................................174
9.6. Блокирующие очереди ........................................................................177
9.7. Блокирующие стеки и мультимножества..............................................180
9.8. Асинхронные очереди .........................................................................182
9.9. Регулировка очередей.........................................................................186
9.10. Выборка в очередях ..........................................................................189
9.11. Асинхронные стеки и мультимножества.............................................191
9.12. Блокирующие/асинхронные очереди .................................................193
Глава 10. Отмена...........................................................................................199
10.1. Выдача запросов на отмену...............................................................200
10.2. Реагирование на запросы на отмену посредством
периодического опроса..............................................................................204
10.3. Отмена по тайм-ауту..........................................................................206
10.4. Отмена async-кода.............................................................................208
10.5. Отмена параллельного кода ..............................................................209
10.6. Отмена кода System.Reactive .............................................................211
10.7. Отмена сетей потоков данных ...........................................................213
10.8. Внедрение запросов на отмену..........................................................215
10.9. Взаимодействие с другими системами отмены ...................................217
Глава 11. ООП, хорошо сочетающееся с функциональным
программированием........................................................................................219
11.1. Асинхронные интерфейсы и наследование ........................................220
11.2. Асинхронное конструирование: фабрики...........................................222
11.3. Асинхронное конструирование: паттерн асинхронной инициализации .....224
11.4. Асинхронные свойства.......................................................................228
11.5. async-события ...................................................................................232
11.6. Асинхронное освобождение...............................................................236
Глава 12. Синхронизация...............................................................................240
12.1. Блокировки и команда lock ...............................................................246
12.2. Блокировки с async............................................................................249
12.3. Блокирующие сигналы.......................................................................251
12.4. Асинхронные сигналы........................................................................253
12.5. Регулировка ......................................................................................255
Глава 13. Планирование................................................................................258
13.1. Планирование работы в пуле потоков ...............................................258
13.2. Выполнение кода с помощью планировщика задач............................260
13.3. Планирование параллельного кода ...................................................263
13.4. Синхронизация потоков данных с помощью планировщиков .............264
Глава 14. Сценарии .......................................................................................266
14.1. Инициализация совместных ресурсов ................................................266
14.2. Отложенное вычисление в System.Reactive........................................270
14.3. Асинхронное связывание данных.......................................................272
14.4. Неявное состояние ............................................................................275
14.5. Идентичный синхронный и асинхронный код.....................................278
14.6. «Рельсовое» программирование с сетями потоков данных ................280
14.7. Регулировка обновлений о ходе выполнения операции......................283
Приложение А. Поддержка унаследованных платформ ................................289
Поддержка async на старых платформах ...................................................290
Поддержка Dataflow на старых платформах................................................290
Поддержка System.Reactive на старых платформах.....................................291
Приложение Б. Распознавание и интерпретация асинхронных паттернов .....292
Асинхронный паттерн на основе Task (TAP) ...............................................293
Модель асинхронного программирования (APM) ........................................294
Об авторе .................................................................................................. 301
Об обложке .............................................................................................. 302

Наверх