метод moveNext вызывает GetAwaiter (тоже кстати хуево понимаю что оно делает), дальше проверяет - таска завершена - скип до возврата авайтером результата, если нет - делаем копию fsm, выполняем какой-то AwaitUnsafe (т.е ожидает awaiter, и по его завершению - вызывает следующий переход автомата)
ну, если состояние таки поменялось - (а awaiter передан как ref, но сам является ссылкой на корневой аваитер), значит опять присваиваем локальному авайтеру переменную класса, затем ее сводим к дефолту и состояние ставим на -1 - ну и дальше возвращаем опять резалт. Вопрос в чем - что является здесь переменной
private TaskAwaiter <>u__1;? если написать вот так например
p.s перед этим состояние автомата инициализируется вызовом MoveNext из метода Start присвоением из кода -1. А вот поведение уже определяется moveNext из .Start(), соответственно выполнение идет с первого if-а, где вроде бы все понятно, что делает else блок непонятно вообще
в общем дочитал статью до конца - вот эти моменты мне показались самыми важными
Обсуждают сегодня