Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование. 2-е межд. изд
Большинство разработчиков настороженно относятся к конкурентному и многопоточному программированию, опасаясь проблем связанных с взаимной блокировкой, голоданием и др. Стивен Клири поможет разобраться с трудностями и избежать подводных камней, возникающих при решении реальных задач. В вашем распоряжении 85 рецептов работы с. NET и C# 8.0, необходимых для параллельной обработки и асинхронного программирования. Конкурентность уже стала общепринятым методом разработки хорошо масштабируемых приложений, но параллельное программирование остается непростой задачей. Подробные примеры и комментарии к коду позволят разобраться в том, как современные инструменты повышают уровень абстракции и упрощают конкурентное программирование. Вы научитесь: — использовать async и await для асинхронных операций — расширять возможности кода за счет использования асинхронных потоков — исследовать потенциал параллельного программирования с библиотекой TPL Dataflow — создавать конвейеры потоков данных с библиотекой TPL Dataflow — задействовать функциональность System.Reactive на базе LINQ — использовать потоково-безопасные и неизменяемые коллекции — проводить модульное тестирование конкурентного кода — брать под контроль пул потоков — реализовывать корректную кооперативную отмену — анализировать сценарии на предмет объединения конкурентных методов — пользоваться всеми возможностями асинхронно-совместимого объектно-ориентированного программирования — распознавать и создавать адаптеры для кода, в котором используются старые стили асинхронного программирования.
Большинство методов должно возвращать Task, поскольку при потреблении Task возникает меньше скрытых ловушек, чем при потреблении ValueTask. Подробности см. в рецепте 2.11
Возможны ситуации (например, с Task.WhenAll), в которых Task может содержать несколько исключений, а await повторно выдает только первое из них. За примером обработки всех исключений обращайтесь к рецепту 2.4