Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Асинхронное программирование в C# 5.0

Покупка
Артикул: 442775.03.99
Доступ онлайн
199 ₽
В корзину
Из этого краткого руководства вы узнаете, как механизм async в С# 5.0 позволяет упростить написание асинхронного кода. Помимо ясного введения в асинхронное программирование вообще, вы найдете углубленное описание работы этого конкретного механизма и ответ на вопрос, когда и зачем использовать его в собственных приложениях. В книге рассматриваются следующие вопросы: — Как писать асинхронный код вручную и как механизм async скрывает неприглядные детали. — Новые способы повышения производительности серверного кода в приложениях ASP.NET. — Совместная работа async и WinRT в приложениях для Windows 8. — Смысл ключевого слова await в async-методах. — В каком потоке .NET исполняется асинхронный код в каждой точке программы. — Написание асинхронных API, согласованных с паттерном Task-based Asynchronous Pattern (ТАР). — Распараллеливание программ для задействования возможностей современных компьютеров. — Измерение производительности async-кода и сравнение с альтернативными подходами. Книга рассчитана на опытных программистов на С#, но будет понятна и начинающим. Она изобилует примерами кода, который можно использовать в своих программах.
Дэвис, А. Асинхронное программирование в C# 5.0 : практическое руководство / А. Дэвис. - 2-е изд. - Москва : ДМК Пресс, 2023. - 121 с. - ISBN 978-5-89818-335-6. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2102622 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Алекс Дэвис

Асинхронное 
программирование 
в C# 5.0

Async in C# 5.0

Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo

Асинхронное 
программирование 
в C# 5.0

Москва, 2023

Алекс Дэвис

2-е издание, электронное

УДК 004.438C#
ББК 32.973.26-018.2
Д94

Д94
Дэвис, Алекс.
Асинхронное программирование в C# 5.0 / А. Дэвис. — 2-е изд., эл. — 1 файл pdf : 
122 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо 
Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный.

ISBN 978-5-89818-335-6

Из этого краткого руководства вы узнаете, как механизм async в С# 5.0 позволяет упростить 
написание асинхронного кода. Помимо ясного введения в асинхронное программирование 
вообще, вы найдете углубленное описание работы этого конкретного механизма и ответ на 
вопрос, когда и зачем использовать его в собственных приложениях.
В книге рассматриваются следующие вопросы:
—  Как писать асинхронный код вручную и как механизм async скрывает неприглядные 
детали.
—  Новые способы повышения производительности серверного кода в приложениях ASP.
NET.
— Совместная работа async и WinRT в приложениях для Windows 8.
— Смысл ключевого слова await в async-методах.
— В каком потоке .NET исполняется асинхронный код в каждой точке программы.
—  Написание асинхронных API, согласованных с паттерном Task-based Asynchronous 
Pattern (ТАР).
—  Распараллеливание программ для задействования возможностей современных компьютеров.
— Измерение производительности async-кода и сравнение с альтернативными подходами.
Книга рассчитана на опытных программистов на С#, но будет понятна и начинающим. Она 
изобилует примерами кода, который можно использовать в своих программах.

УДК 004.438C# 
ББК 32.973.26-018.2

Электронное издание на основе печатного издания: Асинхронное программирование в C# 5.0 / А. Дэвис. — 
Москва : ДМК Пресс, 2013. — 120 с. — ISBN 978-5-94074-886-1. — Текст : непосредственный.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы 
то ни было средствами без  письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все 
равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В 
связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских 
прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-335-6
©  2012 Alex Davies. This translation is published 
and sold by permission of O’Reilly Media, Inc., 
which owns or controls all rights to publish and 
sell the same.
©  Оформление, перевод на русский язык 
ДМК Пресс, 2013

ОГЛАВЛЕНИЕ

Предисловие ...............................................9
Предполагаемая аудитория ....................................................... 9
Как читать эту книгу ................................................................. 10
Принятые соглашения ............................................................. 10
О примерах кода...................................................................... 11
Как с нами связаться ............................................................... 11
Благодарности ........................................................................ 12
Об авторе ................................................................................ 12

Глава 1. Введение ....................................... 13
Асинхронное программирование ............................................ 13
Чем так хорош асинхронный код? ............................................ 14
Что такое async? ...................................................................... 15
Что делает async? .................................................................... 15
Async не решает все проблемы ................................................ 17

Глава 2. Зачем делать программу асинхронной ...18
Приложения с графическим интерфейсом пользователя 
для настольных компьютеров .................................................. 18
Аналогия с кафе ...................................................................... 19
Серверный код веб-приложения ............................................. 20
Еще одна аналогия: кухня в ресторане ..................................... 21
Silverlight, Windows Phone и Windows 8 ..................................... 22
Параллельный код ................................................................... 23
Пример.................................................................................... 24

Глава 3. Написание асинхронного кода вручную ...26
О некоторых асинхронных паттернах в .NET ............................. 26
Простейший асинхронный паттерн .......................................... 28
Введение в класс Task ............................................................. 29
Чем плоха реализация асинхронности вручную? ..................... 30
Переработка примера с использованием написанного 
вручную асинхронного кода ..................................................... 31

Оглавление

Глава 4. Написание асинхронных методов ...... 33
Преобразование программы скачивания значков к виду, 
использующему async ............................................................. 33
Task и await .............................................................................. 34
Тип значения, возвращаемого асинхронным методом ............. 36
Async, сигнатуры методов и интерфейсы................................. 37
Предложение return в асинхронных методах ............................ 38
Асинхронные методы «заразны» .............................................. 39
Асинхронные анонимные делегаты и лямбда-выражения ........ 40

Глава 5. Что в действительности делает await ...41
Приостановка и возобновление метода ................................... 41
Состояние метода ................................................................... 42
Контекст .................................................................................. 43
Когда нельзя использовать await ............................................. 44
Блоки catch и finally .................................................................. 44
Блоки lock ................................................................................ 45
Выражения LINQ-запросов ....................................................... 46
Небезопасный код ................................................................... 47
Запоминание исключений ....................................................... 47
Асинхронные методы до поры исполняются синхронно ........... 48

Глава 6. Паттерн TAP ................................... 50
Что специфицировано в TAP? .................................................. 50
Использование Task для операций, требующих большого 
объема вычислений ................................................................. 52
Создание задачи-марионетки ................................................. 53
Взаимодействие с прежними асинхронными паттернами ........ 55
Холодные и горячие задачи ..................................................... 56
Предварительная работа ......................................................... 56

Глава 7. Вспомогательные средства для 
асинхронного кода ...................................... 58
Задержка на указанное время ................................................. 58
Ожидание завершения нескольких задач ................................ 59
Ожидание завершения любой задачи из нескольких ............... 61
Создание собственных комбинаторов ..................................... 62
Отмена асинхронных операций ............................................... 64
Информирование о ходе выполнения асинхронной операции ....65
Глава 8. В каком потоке исполняется мой код? ...67
До первого await ...................................................................... 67

Оглавление

Во время асинхронной операции ............................................. 68
Подробнее о классе SynchronizationContext ............................. 69
await и SynchronizationContext .................................................. 69
Жизненный цикл асинхронной операции ................................. 70
Когда не следует использовать SynchronizationContext ............ 73
Взаимодействие с синхронным кодом ..................................... 74

Глава 9. Исключения в асинхронном коде ....... 76
Исключения в async-методах, возвращающих Task .................. 76
Незамеченные исключения ..................................................... 78
Исключения в методах типа async void ..................................... 79
Выстрелил и забыл .................................................................. 79
AggregateException и WhenAll ................................................... 80
Синхронное возбуждение исключений .................................... 81
Блок finally в async-методах ..................................................... 82

Глава 10. Организация параллелизма 
с помощью механизма async ........................ 83
await и блокировки ................................................................... 83
Акторы ..................................................................................... 85
Использование акторов в C# ................................................... 86
Библиотека Task Parallel Library Dataflow .................................. 87

Глава 11. Автономное тестирование 
асинхронного кода ...................................... 90
Проблема автономного тестирования в асинхронном 
окружении ............................................................................... 90
Написание работающих асинхронных тестов вручную ............. 91
Поддержка со стороны каркаса автономного тестирования .... 91

Глава 12. Механизм async в приложениях 
ASP.NET .................................................... 93
Преимущества асинхронного веб-серверного кода ................. 93
Использование async в ASP.NET MVC 4 .................................... 94
Использование async в предыдущих версиях ASP.NET MVC ..... 94
Использование async в ASP.NET Web Forms ............................. 95

Глава 13. Механизм async в приложениях WinRT ... 97
Что такое WinRT? ..................................................................... 97
Интерфейсы IAsyncAction и IAsyncOperation<T> ...................... 98
Отмена .................................................................................... 99

Оглавление

Информирование о ходе выполнения ...................................... 99
Реализация асинхронных методов в компоненте WinRT ......... 100

Глава 14. Подробно о преобразовании 
асинхронного кода, осуществляемом 
компилятором ......................................... 102
Метод-заглушка .................................................................... 102
Структура конечного автомата............................................... 103
Метод MoveNext .................................................................... 105
Наш код.................................................................................. 106
Преобразование предложений return в код завершения ......... 106
Переход в нужное место метода ............................................. 106
Приостановка метода в месте встречи await ........................... 107
Возобновление после await .................................................... 107
Синхронное завершение ........................................................ 107
Перехват исключений ............................................................. 108
Более сложный код ................................................................ 108
Разработка типов, допускающих ожидание ........................... 109
Взаимодействие с отладчиком .............................................. 110

Глава 15. Производительность асинхронного 
кода ....................................................... 112
Измерение накладных расходов механизма async ................. 112
Async и блокирующая длительная операция .......................... 113
Оптимизация асинхронного кода для длительной операции ....116
Async-методы и написанный вручную асинхронный код......... 116
Async и блокирование без длительной операции ................... 117
Оптимизация асинхронного кода без длительной операции ....118
Резюме ................................................................................. 119

ПРЕДИСЛОВИЕ

Средства асинхронного программирования – мощный механизм, добавленный в версию 5.0 языка программирования C#. Это произошло как 
раз в тот момент, когда производительность и распараллеливание вызывают всё более пристальный интерес у разработчиков программного 
обеспечения. При правильном использовании новые средства позволяют создавать программы с такими характеристиками производительности и параллелизма, которых раньше можно было добиться только за 
счет написания объемного и громоздкого кода. Однако тема эта непроста, и у нее есть масса нюансов, не очевидных с первого взгляда.
Если не считать Visual Basic .NET, в который средства асинхронного программирования были добавлены одновременно с C#, то ни 
в одном из других широко распространенных языков программирования ничего эквивалентного нет1. Рекомендации по их применению 
в реальных программах найти трудно, опыт еще не наработан. В этой 
книге я хочу поделиться своей практикой работы, а также идеями, почерпнутыми у проектировщиков C# и из теоретической информатики. Но главное – я покажу, что такое механизм async, как он работает 
и почему его стоит использовать.

Предполагаемая аудитория

Эта книга рассчитана на программистов, уверенно владеющих языком C#. Быть может, вы хотите понять, что такое механизм async и 
стоит ли его использовать в своих программах. А, быть может, уже 
вовсю работаете с ним, но хотели бы познакомиться с передовыми 
приемами и узнать о подводных камнях.
Тем не менее, знакомство с другими продвинутыми средствами C# 
не предполагается, так что книга может быть полезна также начинающим программистам на C# и тем, кто пишет на других языках.
На C# разрабатываются самые разные приложения, и во всех них 
механизм async может найти применения – для различных целей. 
Поэтому в этой книге мы будем рассматривать как клиентские, так 

1 Это чрезмерно категоричное утверждение оставим на совести автора. – Прим. перев.

Предисловие

и серверные программы и посвятим отдельные главы технологиям 
ASP.NET и WinRT.

Как читать эту книгу
Предполагается, что вы будете читать книгу последовательно, от начала до конца – для того чтобы познакомиться с механизмом async. 
Новые идеи излагаются по порядку и иллюстрируются на примерах. 
В особенности это относится к первым пяти главам.
Лучший способ чему-то научиться – практиковаться, поэтому я рекомендую выполнять все примеры. Для этого вам понадобится какаянибудь среда разработки на C#, например Microsoft Visual Studio или 
MonoDevelop. Не упускайте возможность развить примеры и применить полученные знания в собственных программах – так вы сможете 
глубже усвоить материал.
Прочитав всю книгу, вы, возможно, захотите использовать главы, 
начиная с шестой, как справочник по продвинутым способам работы 
с async. Эти главы относительно независимы.
• В главах 6 и 7 рассматриваются приемы,  применяемые при 
программировании с помощью async.
• Главы 8 и 9 посвящены нетривиальным аспектам механизма 
async.
• В главах с 10 по 13 обсуждаются ситуации, в которых механизм async может быть полезен.
• В главах 14 и 15 речь идет о внутреннем устройстве async.

Принятые соглашения
В этой книге используются следующие графические выделения:
Курсив
 
Таким шрифтом набраны новые термины, URL-адреса, адреса 
электронной почты, имена и расширения файлов.
Моноширинный шрифт
 
Применяется для набора листингов, а также внутри основного 
текста для обозначения элементов программы: имен переменных и функций, баз данных, типов данных, переменных окружения, языковых конструкций и ключевых слов.
Моноширинный курсив
 
Так набран текст, вместо которого нужно подставить задаваемые пользователем или зависящие от контекста значения.

Доступ онлайн
199 ₽
В корзину