он в деструкторе все свои операции кенселил и ждал пока внутренний поток завершится.
Сделал так.
pub struct FileServer {
join_handle: Option<thread::JoinHandle<()>>,
cancellation_token: Option<oneshot::Sender<()>>,
}
Нужен именно Option<_> ибо в drop мутабельная ссылка а не передача владения
impl Drop for FileServer {
fn drop(&mut self) {
self.cancellation_token.take().unwrap().send(());
self.join_handle.take().unwrap().join().unwrap();
}
}
Ощущается это все как костыль
Нет, используй if let.
А почему бы просто не вызывать drop у объектов явно, раз там мутабельная ссылка?
Так, стоп, а зачем нужно именно владение?
Обсуждают сегодня