Size: a a a

2020 December 03

D

Denis in Rust Async
да проблема-то по сути только в потенциальном дедлоке
источник

MB

Mikail Bagishov in Rust Async
Anton
нет, тупо спавн
pub struct LinkLog {
   db_pool,
   log: Option<Log>,
}


impl Drop for LinkLog {
   fn drop(&mut self) {

       let db_pool  = self.db_pool.clone();

       if let Some(log) = self.log.take() {

           futures_executor::block_on(async move {
               tokio::spawn(async move {
                   ///
               });
           });
       }
   }
}
tokio::spawn работает синхронно, нет нужды в block_on.
источник

A

Anton in Rust Async
Mikail Bagishov
tokio::spawn работает синхронно, нет нужды в block_on.
Разве?
источник

D

Denis in Rust Async
Denis
да проблема-то по сути только в потенциальном дедлоке
и то, только если надо дождаться окончания выполнения
источник

A

Anton in Rust Async
Мне жаловался раньше на контекст
источник

MB

Mikail Bagishov in Rust Async
Да, сам spawn работает синхронно, потому что запущенная им таска будет выполнена в фоне, и он ее не ждет.
А вот контекст токио действительно нужен, но block_on и не даст тебе этого контекста :)
источник

MB

Mikail Bagishov in Rust Async
Тебе нужно заранее, например в конструкторе, забирать tokio::runtime::Handle::current() и сохранять его
источник

MB

Mikail Bagishov in Rust Async
А потом в деструкторе его enter()-ить, и тогда уже можно делать spawn()
источник

A

Anton in Rust Async
Mikail Bagishov
Да, сам spawn работает синхронно, потому что запущенная им таска будет выполнена в фоне, и он ее не ждет.
А вот контекст токио действительно нужен, но block_on и не даст тебе этого контекста :)
Так сейчас работает, значит ты что-то путаешь
источник

MB

Mikail Bagishov in Rust Async
Anton
Так сейчас работает, значит ты что-то путаешь
Значит тебе везет и дроп вызывается в контексте токио
источник

MB

Mikail Bagishov in Rust Async
block_on не мешает и не помогает
источник

A

Anton in Rust Async
У токио контекст глобальный, но спавнидолден быть в асинке
источник

MB

Mikail Bagishov in Rust Async
Anton
У токио контекст глобальный, но спавнидолден быть в асинке
Похоже это баг в токио
источник

MB

Mikail Bagishov in Rust Async
потому что Handle::spawn работает
источник

MB

Mikail Bagishov in Rust Async
источник

MB

Mikail Bagishov in Rust Async
вот тут для максимальной чистоты я делаю спавн через хэндл аж на отдельном потоке
источник

A

Anton in Rust Async
Зачем мне спавн через хэндл если я могу и так заспавнить через tokio::spawn?)
источник

A

Anton in Rust Async
Насчёт синхронного контекста проверю, но мне кажется ты путаешь со spawn_blocking
источник

MB

Mikail Bagishov in Rust Async
А, не, я туплю
источник

MB

Mikail Bagishov in Rust Async
tokio::spawn тоже работает в синхронном контексте
источник