Здравствуйте, mrTwister, Вы писали:
T>Здравствуйте, gandjustas, Вы писали:
G>>В C# можно в явном виде увидеть состояние "продожения" в async\await, оно сильно меньше чем весь стек + регистры.
T>А зачем весь стек сохранять, почему регистров недостаточно?
Работает поток: вызвал функцию А, она функцию Б, она функцию В. Произошло прерывание. Через пару десятков мсек возвращает правление потоку 1, возвращает стек на место, возвращает регистры и thread local значения. И функция В как ни в чем не бывало продолжает выполняться, возвращает управление функции Б, а та в свою очрередь функции А.
В async\await все переменные, используемые после прерывания, попадают в "состояние". Стек вызовов не хранится, а хранится только номер точки прерывания в каждой функции в цепочки вызовов и в switch по этому номеру функция продожает выполняться с точки прерывания.