ее потом сунуть в tokio::spawn?
есть такое решение:
fn test_spawn<F, Fut>(f: F)
where F: Fn() -> Fut,
Fut: Future<Output = ()> + Send + Sync + 'static
{
spawn(f());
}
Но оно не работает, потому что везде получится lifetime mismatch. Как быть?
То есть вопрос "как заспавнить футуру с не 'static лайфтаймом?" Никак. Убирать ссылки и делать футуру 'static
https://pastebin.com/MwPnYSXx К более конкретному примеру. Почему так и как исправлять? frame_reader выглядит вот так: async fn frame_reader(reader: &mut Reader) -> Result<i32> { Ok(32) }
``` fn frame_reader(reader: &mut Reader) -> impl Future<Ouput=Result<i32>> { async { Ok(32) } ```
"захватывает все параметры" это как? В чем разница между записью в async fn и async блоком внутри? Объясните, или линк на пояснение
Это move. async fn создает то же, что и fn -> impl Future. Данные захватываются внутрь (муваются/копируются, аналогично замыканиям). Потому может случиться такое, что какой-нибдь tokio::spawn требует 'static Future, поэтому передать Future: 'a не получится. Т.е. пример сверху не сработает, т.к. там &mut Reader < 'static живет
Обсуждают сегодня