Как можно реализовать новую функцию async в C # 5.0 с помощью call / cc?

Я следил за новым объявлением о новой функции async , которая будет в C # 5.0. У меня есть базовое представление о стиле передачи продолжения и о преобразовании, которое новый компилятор C # делает для кода, подобного этому фрагменту из сообщения Эрика Липперта :

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);
  }
}

Я знаю, что некоторые языки реализуют продолжения изначально, через call-with -current-continue ( callcc ), но я действительно не понимаю, как это работает и что именно.

Итак, вот вопрос: если Anders et al. решил «укусить пулю» и просто реализовать callcc в C # 5.0 вместо специального случая async / await , как будет выглядеть приведенный выше фрагмент?

19
задан Ian Ringrose 2 November 2010 в 09:52
поделиться