Здравствуйте, DemAS, Вы писали:
DAS>1. Буду благодарен за пример проблемы, в решении которой coroutines не притянуты за уши.
ReadAllLinesLazy(fileName : string) : System.Collections.Generic.IEnumerable[string]
{
using (file = IO.File.OpenText(fileName))
{
def loop()
{
def line = file.ReadLine();
when (line != null)
{
yield line;
loop();
}
}
loop();
}
}
Test() : void
{
foreach (line in ReadAllLinesLazy("ФайлоНаДесятьГигабайт"))
{
WriteLine(line);
}
}
DAS>В решении на C# coroutines я вообще не увидел
Ну так это первый C#... там корутин нету. Во втором есть yield return.
DAS>2. Вопрос по реализации. Если я правильно понимаю, между вызовами coroutine ее состояние(локальные переменные и точка возврата) должна где-то сохраняться. Где она сохраняется? Неужели в стеке?
Зависит от реализации.
В случае C# и Nemerle генерируется некий класс который и хранит состояние.
В других реализациях может быть иначе вплоть до инлайна корутины.