Вчера я был на первом семинаре вообще и на .
Net в частности, и так уж получилось, что я вел этот семинар (да, кроме меня там тоже были люди, правда).
Семинар был посвящен асинхронное программирование на платформе .
Net , которое состоялось вчера в учебном центре Luxoft. Присутствовало около двадцати человек, большинство из которых были знакомыми ребятами из команд, в которых я либо работал, либо с которыми мы достаточно тесно общаемся.
Но там было 8 человек из других команд и, кажется, даже не из Luxoft. Из-за того, что там были в основном все свои, атмосфера с самого начала была неформальной: ребята дразнили меня, а я, в свою очередь, дразнил их.
По сути, семинар был основан на двух моих статьях об асинхронном программировании: «Асинхронное программирование и AsyncEnumerator» И «Введение в асинхронные операции в C# 5» , а также статьи о внутренней структуре итераторов: «Итераторы в C#» .
Реактивные расширения, которые я тоже собирался рассмотреть, совершенно не подошли; Для обзора только приемников двух часов будет недостаточно, поэтому я решил не распыляться.
В результате получилась презентация из 50 слайдов примерно следующей структуры: 1. Свидания и все такое бла-бла-бла.
2. Синхронные операции с примерами, их преимущества и недостатки.
Прежде чем перейти к асинхронному программированию, вам необходимо понять, что не так с синхронным программированием.
В общем, большинству людей знакомы эти проблемы, но было полезно поговорить о таких понятиях, как операции с привязкой к ЦП и операциям с привязкой к вводу-выводу, чтобы все поняли, о чем мы говорим.
3. Шаблоны асинхронного программирования в .
Net: (1) Классический асинхронный шаблон и 2) Асинхронный шаблон на основе событий .
Почти каждый .
Net-программист знает о методах BeginXXX/EndXXX, и большинство из них работали с этим классом.
Однако не все знают, что методы BeginXXX/EndXXX представляют собой классический шаблон асинхронного программирования.
ФонРаботник является типичным представителем асинхронного шаблона на основе событий.
4. Недостатки существующих шаблонов Хотя это всего лишь один слайд, он достаточно важен, чтобы выделить отдельный раздел.
А ведь именно недостатки использования существующих паттернов асинхронного программирования, такие как сложность использования и искажение потока выполнения, побудили таких товарищей, как Джефф Рихтер и Эрик Мейер, придумывать всякую разную хрень, типа AsyncEnumerator классы и библиотеки, такие как Реактивные расширения .
Я уже молчу за некоторых личностей, которые решили добавить поддержку асинхронности в пару очень популярных языков программирования (*).
5. Библиотека PowerThreading и, в частности, класс AsyncEnumerator. Важность изобретения Рихтера заключается в том, что та же идея лежит в основе новых языковых конструкций C# 5: await и async. Но, поскольку этот класс построен на основе минимума дополнительных языковых конструкций и не использует никаких других сторонних библиотек, гораздо проще понять, как он «выпрямляет» поток выполнения, чем сразу переходить к рассмотрению ждать и асинхронизировать.
По сути, единственная концепция, которую вам нужно освоить, — это блоки итераторов.
5.1. Отступление от темы: блоки итераторов.
Я подозревал, что невозможно объяснить, как работает класс AsyncEnumerator, не понимая, как работают блоки итераторов.
И я, видимо, правильно сделал, что добавил в отчет этот раздел; Многие ребята прекрасно знают, что такое блоки-итераторы, и более-менее понимают, как они работают, но не все понимают последствия «взлома шаблона», которые делает доходность return. В ходе доклада я вернулся к теме итераторов и напомнил об их внутреннем устройстве.
6. Асинхронные операции в C# 5. Ключевые слова async и await. Вот здесь я, наверное, допустил самую существенную ошибку: слишком мало внимания уделил учёту занятий.
Задача .
По сути, новые функции асинхронного программирования построены на двух концепциях: (1) «дислокация» потоков, которая очень похожа на блоки итераторов, и (2) классы «задач» ( Задача И Задача ).
Но более-менее подробно я рассмотрел только первую составляющую, а вторую рассмотрел лишь поверхностно.
Поэтому мне пришлось на лету приводить примеры с задачами, со всеми их продолжениями, контекстами синхронизации и связями с BeginXXX/EndXXX и демонстрировать их на пальцах.
Основное рассмотрение возможностей await и async проводилось в контексте уже изученного материала: заменяем IEnumerator с async и return return с await, и мы переходим от AsyncEnumerator к новым функциям C# 5.0. 7. Заключение, вопросы и т.п.
Краткое содержание семинара Сегодня был проведен дополнительный разбор полетов с коллегами, по итогам которого были сделаны следующие выводы.
Над чем работать: 1. Я периодически блуждал по слайдам и говорил от себя, иногда опережая слайды.
2. Не все термины, которые я использовал, были понятны людям.
Например, я мог бы поговорить о контекстах синхронизации, предполагая, что все знакомы с этими понятиями.
Поскольку так было не всегда, часть аудитории была потеряна.
3. Расскажите историю от простого к сложному, а не наоборот. Были случаи, когда я сначала поверхностно затрагивал те или иные темы, а уже потом рассматривал их более подробно.
Из-за этого у ребят возникли дополнительные вопросы и возникло некоторое недопонимание.
4. Больше общайтесь с аудиторией.
Я старался задавать вопросы и иногда даже глупо шутить, но стоит больше вовлекать аудиторию.
5. Больше рисунков и меньше кода.
В общем, на слайдах было много кода, а в дополнительных материалах еще больше.
Многие концепции, особенно блоки итераторов и, соответственно, вся эта асинхронная хрень, нуждаются в более сильной визуализации.
Этот код не является лучшей демонстрацией сложного потока выполнения асинхронного кода.
6. Да, я слишком мало внимания уделял задачам (классы Task, Task , и т. д.).
Нужно больше примеров со всякими ContinueWith и тому подобными, желательно в виде картинок, с явной демонстрацией потока выполнения.
7. В примерах кода отсутствовали номера строк, и мне не хватало лазерной указки.
Из-за этого иногда приходилось дополнительно бегать по залу и что-то рассказывать на пальцах.
8. В следующий раз вам нужно это записать, чтобы посмотреть на себя со стороны и провести более детальный анализ ошибок.
Что мне понравилось: Несмотря на то, что есть ряд вопросов, над которыми необходимо работать, в целом семинар удался.
Мне понравилось то, что мне нравилось вести этот семинар, а слушателям нравилось его слушать.
Слушатели были отзывчивыми и понимающими.
Правда, в дискуссию вступали только «свои» люди, а ребята, не знавшие меня лично, кивали и поднимали руки максимум на вопросы типа: «Вы знаете, кто такой РихтерЭ» В общем, я готов повторить и рассмотреть либо эту тему еще раз, либо коснуться реактивных расширений, которыми заинтересовались многие ребята.
Скачать его можно здесь: (1) презентация ; (2) тестовый проект .
----------------------------- (*) Это тонкий намек на Андерса Хейлсберга и его компанию, которые собираются добавить возможности асинхронного программирования на C# и VB.NET ;) Теги: #.
NET #CSharp 5 #многопоточность #асинхронный #.
NET
-
Руководство По Покупке Ноутбука – Часть 3
19 Oct, 24 -
Советы По Созданию Отличного Веб-Сайта
19 Oct, 24 -
Microsoft Действительно Хочет Купить Yahoo
19 Oct, 24