Эрик снова рассуждает о языке C#

Рейчел Румелиотис (Rachel Roumeliotis), которая, помимо прочего является редактором книг о C# в издательстве O’Reilly, взяла у меня недавно интервью, в котором я рассказываю о async/await, проекте Roslyn, анализе производительности как об инженерной дисциплине, и некоторых идеях в исследовании языков программирования в будущем. Если у вас есть лишние 16 минут, то обязательно посмотрите! Запись в…


Доступна бета-версия языка C# 5.0

Я невероятно рад сообщить, что бета-версия Visual Studio версии 11 (которая включает .NET CLR версии 4.5, Visual Basic версии 11, C# версии 5) уже доступна для скачивания. Как вы, наверное, знаете (если следили за нашими CTP выпусками), языки C# и VB значительно упростили асинхронное программирования в стиле «передачи продолжений» («continuation-passing» style), так что теперь компилятор…


Обновление Async CTP

Доброе утро всем! Я рад сообщить вам, что команды C# и VB «обновили» async CTP (Community Technology Preview) на конференции MIX11, которая проходит сегодня, и что оно теперь доступно на сайте Async CTP. Помните, что CTP – это наш ранний взгляд на предложенную возможность языка под названием async, которая позволит получить нам вашу обратную связь….


Асинхронность в C#. Часть 8: опять исключения

(В этом сообщении я буду говорить о внутренних, неприятных, дурных и критических исключениях. Для разъяснения этих терминов, загляните сюда.) Если в вашем процессе происходит необработанное исключение, то явно произошло что-то плохое и непредвиденное. Если это критическое исключение, то шансов спасти процесс у вас уже нет – с ним уже все кончено. Вы можете так и…


Асинхронность в C# 5. Часть 7: исключения

Давайте продолжим с того места, где мы остановились (ха-ха-ха!) после небольшого отступления: обработка исключений в таких «возобновляемых» методах, подобных нашим асинхронным методам, кажется немного странной. Чтобы понять, насколько это странно, вам может понадобиться освежить в памяти мою последнюю серию статей о проектировании блоков итераторов, и в особенности сообщение о разнице между push и pull-моделями. В…


Асинхронность в C# 5. Часть 6: насколько асинхронно?

Уже несколько людей задали мне вопрос о том, чем руководствовались разработчики языка, требуя, чтобы в объявлении каждого метода, содержащего выражение “await”, присутствовало контекстное ключевое слово “async”. Как и в любом решении, здесь есть свои «за» и «против», которые должны приниматься во внимание в контексте множества противоречивых и несовместимых принципов. Здесь нет простого решения, которое бы…


Асинхронность в C# 5. Часть 5: слишком много задач

Предположим, в городе находится куча отделений банка, в каждом из которых есть куча служащих и один мальчик на побегушках. В городе есть множество клиентов, каждый из которых хочет снять кучу денег из банка в течение дня. Алгоритм следующий: Клиент находит ближайшее отделение и выстаивает в очереди. Если очередь тянется аж до двери, то он идет…


Асинхронность в C# 5. Часть 4: это не магия

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


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

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


Асинхронность в 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;…