170 похожих чатов

Уважаемые, помогите разобраться с корутинами. Пытаюсь понять как работают исключения

в корутинах, но наткнулся на очень странное поведение кода. То ли я что-то делаю не так, то ли gcc глючит.
Вот сам код https://godbolt.org/z/aGr79MKGq

Есть две корутины: fib и takeN. Я передаю fib как rvalue в takeN, и она должна жить во фрейме takeN.
Потом в fib кидаю исключение прямо на первой строчке, которое перебрасываю в unhandle_exception промиса.
В результате деструктор её return-object вызывается два раза: один раз в fib, а второй раз в takeN.
Вопрос, почему это происходит и как правильно пропагировать исключения, если нельзя их перекидывать из unhandle_exception?

6 ответов

15 просмотров

Сохранить исключение в promise, перебросить когда из промиса будут пытаться получить результат его работы.

Stas- Автор вопроса
Stas- Автор вопроса
magras
Сохранить исключение в promise, перебросить когда ...

Но думаю, что лучше всего кидаться после resume() корутины

Stas
Но думаю, что лучше всего кидаться после resume() ...

Какой смысл делать resume на корутине после того как она вышла по исключению? Скорее всего это ub. Но я не уверен, что правильно понял мысль.

Stas- Автор вопроса
magras
Какой смысл делать resume на корутине после того к...

Неа, после resume, в котором было выкинуто исключение и перехвачено в unhandled_exception

Stas
Неа, после resume, в котором было выкинуто исключе...

Речь идет о генераторе? Там, наверное, может иметь смысл делать resume и кидать исключение на инкременте итератора, а значение возвращать при разыменовании. Но не уверен что я бы предпочел такое поведение.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
какие клиентские датасеты в лазаре умеют объединяться в master-detail? нужно забрать на клиент запись из одной таблицы и выборку из другой связанной один-ко-многим, отредактир...
Igor
19
Подскажите, сейчас что то есть (JS модуль какой-нибудь), что можно использовать для: 1) переваривания javascript codа из html fileа, т.е. разбивки, на переменные, команды, бло...
Iar De
32
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
43
кто поможет крякнуть чит? (реверс инжиринг) чтобы разблокировать премиум версию
Mёdkinson Medvezhkin
40
/////////////////////////////////////// TChart / TLineSeries - сохранение данных (текстовый файл) /////////////////////////////////////// добрый день / работа с графиком: 1....
livontiy
14
Подскажите, пожалуйста, как отключить очень сильно доставшие меня подсказки в QT Creator? Они просто мешают видеть то, что я пишу, как гирлянда е.... Просто пишешь одну букву...
Mitchel R
3
Hello I was able to secure a job interview and I need to attend it in 7 hours. I'm so stressed right now, and I also have trust issues so I have this feeling that they may try...
Senator
7
Делал сайт заказчику в 2018г. Прилетела претензия на фотку в примерах работ от copydefend (ооо "фортуна технолоджис") на 36к рублей 🙈 Конторка эта образовалась в 2023 г, и 13...
Alexander Andreev
10
$var = unpack "N"; inet_ntoa($var); Bad arg length for Socket::inet_ntoa, length is 8, should be 4 at а как же тогда надо?
Vyacheslav Olkhovchenkov
6
Карта сайта