Size: a a a

2020 December 02

MB

Mikail Bagishov in Rust Async
А, окей
источник

K

Konstantin in Rust Async
Mikail Bagishov
Если я хочу записать результат этого метода в переменную, то не смогу явно указать ее тип
let res: U = fut.map_into().await;
let fut2 = fit.map_into::<U>();
источник

MB

Mikail Bagishov in Rust Async
Konstantin
let res: U = fut.map_into().await;
let fut2 = fit.map_into::<U>();
>  явно указать ее тип
источник

MB

Mikail Bagishov in Rust Async
Ну и уже выяснили, что тип все-таки импортируется, но rustdoc это почему-то не замечает
источник

K

Konstantin in Rust Async
Mikail Bagishov
>  явно указать ее тип
Указать тип MapInto? В большинстве случаев это не нужно. Всё равно либо эвейт+тайп аскрипшен будет сделан, либо дженерики будут стоять.
источник
2020 December 03

p

polunin.ai in Rust Async
Mikail Bagishov
Ну и уже выяснили, что тип все-таки импортируется, но rustdoc это почему-то не замечает
ты был наполовину прав. там проблема в том, что futures не реэкспортирует futures_util::MapInto у себя, из-за чего дополнительно нужно в зависимостях писать futures_util
источник

A

Anton in Rust Async
Товарищи поскольку асинг дропа нет, приходится futures_executor::block_on + tokio::spawn, это нормальная практика или можно локов нахватать?
источник

D

Denis in Rust Async
можно нахвататься
источник

D

Denis in Rust Async
так что лучше строить архитектуру, исходя из предположения, что деинициализацию надо будет делать вручную
источник

D

Denis in Rust Async
можно процедурный макрос написать, который будет вызывать нужную асинхронную функцию и авейтить её при выходе :)
источник

p

polunin.ai in Rust Async
Denis
так что лучше строить архитектуру, исходя из предположения, что деинициализацию надо будет делать вручную
Зачем тогда Раст если ещё вручную дропы делать лол
источник

D

Denis in Rust Async
polunin.ai
Зачем тогда Раст если ещё вручную дропы делать лол
с набросами в офтопик плз
источник

A

Anton in Rust Async
да хотел логи обмена структурой сделать, а при дропе в бд закидывать в спавне, чтобы не тормозить основной процесс
источник

D

Denis in Rust Async
Anton
да хотел логи обмена структурой сделать, а при дропе в бд закидывать в спавне, чтобы не тормозить основной процесс
unbounded sender?
источник

A

Anton in Rust Async
нет, тупо спавн
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 {
                   ///
               });
           });
       }
   }
}
источник

A

Anton in Rust Async
Denis
можно процедурный макрос написать, который будет вызывать нужную асинхронную функцию и авейтить её при выходе :)
короче предлогаешь условно - спавнить сразу в теле функции, без block_on в дропе?
источник

С

Сергей in Rust Async
Вообще, если дроп долгий, блокирующий и синхронный, то его надо делать в тредпуле, чтобы не ломать евентлуп.
источник

A

Anton in Rust Async
по идее он не должен быть долгий, клон + спавн, сама футурка должна выполнятся в отдельном потоке
источник

С

Сергей in Rust Async
Спавн не даёт волшебную разблокировку, он всё равно заблокирует один из асинк тредов. Если там синхронно и блокируется, надо делать spawn_blocking, чтобы оно уехало в блокирующий тредпул
источник

A

Anton in Rust Async
Там дальше чистый асинк блокинга нет, блокинг только в дропе, так как асинк дропа нет, а заспавнить в асинк надо
источник