Я слежу за новым объявлением о новой функции async
, которая будет в С# 5.0. У меня есть базовое понимание стиля продолжения передачи и преобразования, которое новый компилятор С# делает для кода как этот фрагмент из Eric Lippert post:
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;
archive = ArchiveAsync(document);
}
}
Я знаю, что некоторые языки реализуют продолжения изначально через call-with-current-continuation (callcc
), но я действительно не понимаю, как это работает или что именно оно делает.
Итак, вот вопрос: если Андерс и др. решил укусить пулю и просто реализовать callcc
в С# 5.0 вместо специального случая async
/await
, как выглядел бы этот сниппет?