Если сопрограмма заканчивается неперехваченным исключением, она выполняет следующее: p>
- перехватывает исключение и вызывает метод Promise.unhandled_Exceptionion() из блока catch.
- вызывает Promise.final_suspend() и co_awaits результата (например, чтобы возобновить продолжение или опубликовать результат). Возобновление сопрограммы с этого момента не определено.
Меня смущает второй пункт. Они говорят, что Final_suspend предназначен для выполнения продолжений, но затем они говорят, что возобновление сопрограммы «с этой точки» является неопределенным поведением. Это кажется почти противоречивым. Что именно здесь означает неопределенное поведение? Я могу придумать 3 сценария:
- Неопределенное поведение при прямом или косвенном вызове возобновления в coroutine_handle в теле Final_suspend< /code>?
- Это неопределенное поведение, прямое или косвенное возобновление coroutine_handle из тела await_suspend последнего ожидания?
- Неопределенно ли поведение при возврате coroutine_handle из await_suspend последнего ожидания?
(Я создал пример кода для сценария 3 на godbolt. Для этого вопроса это не обязательно, но может быть полезно, приводит ли моя обработка исключений и продолжений к неопределенному поведению в этом примере?)
Подробнее здесь: https://stackoverflow.com/questions/787 ... d-behavior
Мобильная версия