Есть ли способ найти все запущенные потоки и восстановить для них JoinHandle
?
Нет, это, вероятно, наложит ограничения / накладные расходы на каждого , кто хочет использовать потоки, что является противоположностью для языка системного программирования.
Вы можете написать собственное решение для этого, используя что-то вроде Arc
/ Weak
и глобальный синглтон. Тогда у вас есть собственный реестр тем.
есть ли способ переопределить то, как вызывается Thread
, или как глобально отбрасывается JoinHandle
?
Нет, это невозможно сделать с библиотеками Rust, поскольку они существуют сейчас. Фактически «переопределение» чего-либо в этом масштабе довольно противоречит понятиям статически скомпилированного языка. Представьте, что любая используемая вами библиотека может решить "переопределить", как работает сложение или что делает println
Некоторые языки do допускают такой динамизм, но это обходится дорого. Руст не подходит для этого.
На самом деле, правильное решение для этого не является чем-то новым: просто используйте внедрение зависимостей. «Начало потока» является нетривиальным соавтором и, вероятно, не относится к сфере компетенции большинства библиотек, поскольку это ресурс для всего приложения.
можно восстановить до того, как его уронят
В Rust значения отбрасываются в конце области, где они использовались в последний раз. Это потребует запуска произвольного кода на прологе произвольных функций в любом месте программы. Такая функция вряд ли когда-либо будет реализована.
Существует некоторое обсуждение о создании метода, который будет возвращать дескриптор, который присоединяется к потоку при его отбрасывании, который может делать то, что вы хотите, но люди все равно должны вызывать его
.