Size: a a a

2021 February 24

DF

Dollar Føølish in Rust Async
У админов то все равно все удаленные сообщ видно
источник

в🧇

вафель 🧇 in Rust Async
Присоединюсь к бурчанию. Пользы нет, а вред есть от автоудаления)
источник

S

Sergey in Rust Async
привет
Подскажите пожалуйста как правильно совмещать Result/Option с async

Например у меня есть result:
let res: Result<Future<…>> = result.map(|i|async { … })

Как потом конвертнуть Result<Future<…>> в Result<T, E> или хотябы в Future<Result<T, E>> ?
источник

K

Kitsu in Rust Async
Sergey
привет
Подскажите пожалуйста как правильно совмещать Result/Option с async

Например у меня есть result:
let res: Result<Future<…>> = result.map(|i|async { … })

Как потом конвертнуть Result<Future<…>> в Result<T, E> или хотябы в Future<Result<T, E>> ?
источник

m

mAX in Rust Async
Товарищи, подскажите пожалуйста!
какая-то странная штука происходит..
передают в tokio::spawn фьючу.. async move {...}
все компилится, но код на месте этого spawn "виснет" т.е. я не вижу debug!() вывода сразу за ним.. не запускается сама фьюча и объект который туда передается уничтожается т.к. я в логах вижу его drop()

почему может быть такое поведение?
источник

MB

Mikail Bagishov in Rust Async
Паник и дедлоков нет?
источник

m

mAX in Rust Async
дедлоков вроде нету, там parking_lot мониторит свои дедлоки, я же юзаю только его RwLock
ничего не выдает насчет этого
панику попробую явно поймать уровнем выше, но вроде тоже ничего такого не замечал в логах
источник

С

Сергей in Rust Async
mAX
дедлоков вроде нету, там parking_lot мониторит свои дедлоки, я же юзаю только его RwLock
ничего не выдает насчет этого
панику попробую явно поймать уровнем выше, но вроде тоже ничего такого не замечал в логах
debug! в какой-то логер пишет? Есть возможность на dbg или println заменить?
источник

m

mAX in Rust Async
Сергей
debug! в какой-то логер пишет? Есть возможность на dbg или println заменить?
это на андройде, там у меня кастомная логгилка которая пишет в logcat
попробую на эти варианты
но вообще такой вот код
```
tokio::spawn({
   let mut decoder = decoder.clone();
   debug!("try to spawn decoder future..");
   async move {
       debug!("decoder start() spawn..");
       let res = decoder.start_async().await;
       debug!("decoder ends with res {:?}", res);
   }
});
debug!("spawn decoder future ok");

```
пишет только первую строку
"try to spawn decoder future.."
и все.. не пишет ни последнюю, ни первую внутри async {} фьючи ("decoder start() spawn..")
но пишет лог drop() стркутуры decoder

platform_services::android: try to spawn decoder future..
platform_services::android::media_codec: [543729196352] remove MediaCodecPtr from list. CODECS len 0
источник

m

mAX in Rust Async
вся эта штука запускается внутри отдельного потока
```
std::thread::spawn(move || {
   let mut rt = tokio::runtime::Runtime::
new().unwrap();
   if let
Err(err) = rt.block_on(
       async {
           platform_services::test_decoder().await
       }
   ) {
       debug!("test_decoder err: {}", err)
   };
   debug!("stop decoder thread");
});

```
но я так много чего делал, вроде проблем не было никогда
источник

ph

pl 🦑 hk in Rust Async
может block_on раньше заканчивается, т.к. ты не ждешь ничего?
источник

m

mAX in Rust Async
pl 🦑 hk
может block_on раньше заканчивается, т.к. ты не ждешь ничего?
в test_decoder несколько tokio::spawn и еще свой while на получение данных из выходного стрима
там все логами обвешал, они не пишутся..
соответственно block_on висит
но попробую проверить это все более внимательно
источник

m

mAX in Rust Async
попробую еще tokio::spawn на join!() заменить..
источник

m

mAX in Rust Async
tokio::task::yield_now().await;
раскидывал везде, но не помогало..
источник

m

mAX in Rust Async
mAX
попробую еще tokio::spawn на join!() заменить..
ну вот, кстати, после join!() вместо spawn видно что логи уже другие, что-то там запустилось явно.. буду разбираться
источник

m

mAX in Rust Async
да, какая-то непонятная дичь..
c join!() все заработало на удивление классно!

tokio::fs::read(&path).await
пришлось заменить на синхронный
std::fs::read(&path)
иначе оно подвисало на нем
источник

MB

Mikail Bagishov in Rust Async
А токио точно должен работать на андроиде?
источник

m

mAX in Rust Async
да вроде работал всегда.. не знаю есть ли официальная поддержка
я просто юзал и проблем не было)
источник

MB

Mikail Bagishov in Rust Async
tokio::fs::read внутри себя делает spawn_blocking.
То есть выглядит так, что при любом спавне приложение разваливается.
источник

m

mAX in Rust Async
файлы, правда не читал.. только сеть и таймеры
источник