Асинхронное программирование в C# 5.0
Покупка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Дэвис Алекс
Год издания: 2023
Кол-во страниц: 121
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-89818-335-6
Артикул: 442775.03.99
Из этого краткого руководства вы узнаете, как механизм async в С# 5.0 позволяет упростить написание асинхронного кода. Помимо ясного введения в асинхронное программирование вообще, вы найдете углубленное описание работы этого конкретного механизма и ответ на вопрос, когда и зачем использовать его в собственных приложениях.
В книге рассматриваются следующие вопросы:
— Как писать асинхронный код вручную и как механизм async скрывает неприглядные детали.
— Новые способы повышения производительности серверного кода в приложениях ASP.NET.
— Совместная работа async и WinRT в приложениях для Windows 8.
— Смысл ключевого слова await в async-методах.
— В каком потоке .NET исполняется асинхронный код в каждой точке программы.
— Написание асинхронных API, согласованных с паттерном Task-based Asynchronous Pattern (ТАР).
— Распараллеливание программ для задействования возможностей современных компьютеров.
— Измерение производительности async-кода и сравнение с альтернативными подходами.
Книга рассчитана на опытных программистов на С#, но будет понятна и начинающим. Она изобилует примерами кода, который можно использовать в своих программах.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование
- Программирование на C и C++
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Алекс Дэвис Асинхронное программирование в 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-адреса, адреса электронной почты, имена и расширения файлов. Моноширинный шрифт Применяется для набора листингов, а также внутри основного текста для обозначения элементов программы: имен переменных и функций, баз данных, типов данных, переменных окружения, языковых конструкций и ключевых слов. Моноширинный курсив Так набран текст, вместо которого нужно подставить задаваемые пользователем или зависящие от контекста значения.