Re[3]: Почему в расте отсутствует выброс исключений?
От: FR  
Дата: 30.11.22 07:03
Оценка: +1
Здравствуйте, johny5, Вы писали:

J>Кстате обнаружил для себя panic!, оказывается он не убивает приложение а только текущий поток (ну и приложение если поток был главным). Tokio как то хитро это использует и просто выплёвывает запаниковавшие короутины, продолжая работать дальше. Чем то похоже на эксепшионы.


Технически паники по умолчанию практически аналогичны исключениям С++, так же происходит раскрутка стека. Но вот перехватить их можно только для потока целиком. И кроме того есть режим компиляции panic = abort и при его использовании любая паника в любом потоке прибивает процесс, так что полагаться на паники для обработки ошибок нельзя.


J>На обработчик panic можно ставить свою процедуру через set_hook. Правда, насколько я понял, это глобальный обработчик и он не может остановить убивание провинившегося потока.

J>Просветите если чего недопонял, плиз.

Да все правильно, на уровне потока вполне можно перехватывать, перезапускать же придется только ручным созданием нового потока.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.