Я следил за новым объявлением о новой функции 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
, как будет выглядеть приведенный выше фрагмент?