Асинхронность в C# 5. Часть 3: Композиция

Как то в 6:45 утра я шел на остановку к своему автобусу. Прямо на углу 45-й улицы, молодой парень, без футболки, весь в крови промчался мимо меня. За ним гнался другой парень, размахивая бейсбольной битой. Я сразу же подумал: «Боже мой! Нужно немедленно вызвать полицию!» Затем я увидел, что за парнем с битой гнался Граф…

0

Асинхронность в C# 5. Часть 2: Откуда await?

Сперва я хочу прояснить два момента, поскольку наше исследование простоты использования показало, что это может быть непонятным. Помните код, который я показывал вам в прошлый раз? async void ArchiveDocuments(List<Url> urls) { Task archive = null; for(int i = 0; i < urls.Count; ++i) { var document = await FetchAsync(urls[i]); if (archive != null) await archive;…

0

Возвращаясь к стилю передачи продолжений. Часть 5: CPS и асинхронность

Сегодня повествование будет очень долгим и сложным. Но мы как-нибудь справимся. Давайте рассмотрим следующую задачу: у нас есть список адресов URL и мы хотим получить документы, связанные с каждым адресом (давайте пока предположим, что эта операция всегда завершается успешно). Затем, мы хотим скопировать документ в сетевую папку на ленточный накопитель, поскольку мы являемся представителями старой…

0

Возвращаясь к стилю передачи продолжений. Часть 4: выверни себя наизнанку

Сейчас может возникнуть очевидный вопрос: если CPS является такой классной техникой, то почему бы ею не пользоваться постоянно? Почему большинство профессионалов никогда не слышали об этом, а те, кто слышали, считают, что это нечто безумное, доступное только программистам на Scheme. Прежде всего, большинству людей сложно думать о сопрограммах, циклах, блоках try-catch-finally и тому подобном и…

0

Возвращаясь к стилю передачи продолжений. Часть 3: размышления о сопрограммах

В прошлый раз я кратко описал, как можно реализовать интересную логику управления, такую как try-catch с помощью продолжений; как мы видели, реализация методов Try и Throw весьма примитивна при наличии CPS. Я уверен, что вы можете расширить эти идеи для реализации try-catch-finally. Другим базовым упражнением при изучении CPS является реализация сопрограмм (coroutines). Что такое сопрограмма?…

0

Возвращаясь к стилю передачи продолжений. Часть 2: пассы с логикой управления

В прошлой серии «Невероятных приключений»: «Следуя по этому пути, мы сможем создавать логику управления произвольной сложности в виде библиотечных методов путем сохранения множества продолжений и определения, которое из них будет выполнено следующим». Давайте рассмотрим более сложный пример, нежели условный оператор. Давайте рассмотрим упрощенную версию блоков “try-catch”, в котором отсутствует выражение в операторе генерации исключения (throw)….

0

Возвращаясь к стилю передачи продолжения. Часть 1

Здравствуйте, читатели невероятных приключений. Позвольте мне начать тему, которая будет действительно долгой и действительно сложной, но полностью окупится в конце. Также я собираюсь публиковать сообщения в ускоренном режиме, более двух в неделю. Позже станет ясно, почему я так поступаю, добавлю для интриги. Помните, неопределенность является показателем качества блога. Я хотел бы немного поговорить о предмете,…

1

Блоки итераторов, Часть первая

В дизайне языков программирования есть постоянное трение между решением общих проблем и решением частных проблем; поиск верной точки в спектре от-общего-к-частному может быть весьма нетривиальным. Дизайн блоков итераторов даёт* нам характерный пример. Почти при каждом шаге на его пути есть возможность принять решение, которое определит, будет ли решаться более общая или более частная проблема. Давайте…