[Перевод] Асинхронность в C# 5.0

среда, 3 ноября 2010, Александр Краковецкий

Архитекторы C# 2.0 понимали, что реализация перебора коллекций была сложной, поэтому они придумали итераторы, которые позволяли не задумываться о том, какой объект будет следующий.

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

Архитекторы C# 3.0 понимали, что данные нужно сортировать, фильтровать, объединять и это было неудобным. Поэтому они придумали LINQ, expression trees и т.д.

Архитекторы C# 4.0 понимали, что взаимодействие с динамическими объектами вызывало сложности, поэтому они добавили динамический тип данных. Компилятор в рантайме определял тип данных с помощью созданного DLR (Dynamic Language Runtime).

Архитекторы C# 5.0 понимали, что написание асинхронных вызовов неудобно. Асинхронный код трудно тестировать, а преобразование в цепочку вызовов сложно.

Поэтому недавно было анонсировано, что C# 5.0 станет асинхронным.

Это значит, что, к примеру, этим куском кода:

void ArchiveDocuments(List urls)
{
  for(int i = 0; i < urls.Count; ++i)
    Archive(Fetch(urls[i]));
}

можно будет заменить этот:

async void ArchiveDocuments(List urls)
{
  Task archive = null;
  for(int i = 0; i < urls.Count; ++i)
  {
    var document = await FetchAsync(urls[i]);
    if (archive != null)
      await archive;
    archive = ArchiveAsync(document);
  }
}

Скажите, где в нашем примере лямбда-выражения и проверки завершилась ли текущая задача? Они все еще здесь. Просто мы позволим компилятору дописать все блоки с лямбда-выражениями, проверками, деревьями вызовов и т.д. По сути, async является синтаксическим "сахаром", но, согласитесь, вполне "сладким".

Нужно сразу уточнить, что логика обоих примеров будет одинаковая

В данный момент готовится Community Technology Preview прототип компилятора C# 5.0.Если вам не терпится уже поиграться с новыми возможностями, то вы можете посетить сайт msdn.com/vstudio/async, где сможете скачать Visual Studio Async CTP, а также ряд дополнительных материалов:

Также вы можете посмотреть видео:

И почитать в блогах:

Кроме того, стратегия комплексного развития C# и VB.NET сохраняется и Visual Basic 11 также будет поддерживать асинхронные задачи. Почитайте статью с блога разработчиков VB.NET, а также эту статью для получения дополнительной информации.

Что будет завтра? await? async? Task? как на счет AsyncThingy?

* Даты анонсов в данный момент не известные, поэтому спрашивать об этом нет смысла.

Оригинал и обсуждение статьи.

P.S. Эту заметку Липперт писал, находясь на Microsoft PDC10.

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии