across an await
--> src/bot.rs:75:29
|
65 | let mut whitelist = whitelist.write().unwrap();
| ------------- has type `std::sync::RwLockWriteGuard<'_, HashSet<IpAddr>>` which is not `Send`
...
75 | cx.answer(message).await?;
| ^^^^^^^^^^^^^^^^^^^^^^^^ await occurs here, with `mut whitelist` maybe used later
76 | //}
77 | }
| - `mut whitelist` is later dropped here
note: required by a bound in `teloxide::dispatching::Dispatcher::<R>::messages_handler`
Юзать асинк мьютексы или не держать гарды между await
Странно, но ок: let contains = { let mut whitelist = whitelist.write().unwrap(); let contains = whitelist.contains(&ip); whitelist.insert(ip); contains }; if contains { cx.answer(format!("IP {} is already in whitelist", ip)) .await?;
я не уверен что использовать рвлок в асинке хорошая идея
А почему кстати если сделать drop(whitelist); прямо перед await в этом случае, это не помогает? Она же в этом случае не передаётся между потоками
Обсуждают сегодня