первый Arc::clone менеджера?
pub fn transaction_worker(pool: Pool<Postgres>) -> () {
tokio::spawn(async move {
let manager = Arc::new(ProgramTransformer::new(pool));
let receiver = TcpReceiver::new(
Box::new(move |msg: Vec<u8>| {
let manager_clone = Arc::clone(&manager);
Box::pin(async move {
...
let manager_clone = Arc::clone(&manager_clone);
// use manager_clone later
})
})
);
...
}
если убираю то говорит что manager уже captured by Fn closure.
если что, TcpReceiver::new принимает типа асинхронный коллбек:
callback: Box<dyn Fn(Vec<u8>) -> Pin<Box<dyn Future<Output = ()> + Send>> + Send + Sync>,
кстати может можно как-то попроще написать его и проблема з мувингом решится сама по себе после этого?
убери второй аркклон и норм
Обсуждают сегодня