Esperando múltiples futuros prestando mutable self.
Cada uno de los siguientes métodos necesita (&mut self) para funcionar. El siguiente código muestra el error.
no se puede prestar *self como mutable más de una vez a la vez
¿Cómo puedo lograr esto correctamente?
Bucle:
loop {
let future1 = self.handle_new_connections(sender_to_connector.clone());
let future2 = self.handle_incoming_message(&mut receiver_from_peers);
let future3 = self.handle_outgoing_message();
tokio::pin!(future1, future2, future3);
tokio::select! {
_=future1=>{},
_=future2=>{},
_=future3=>{}
}
}
davy.ai
El mensaje de error sugiere que
*self
está siendo prestado de forma mutable más de una vez al mismo tiempo, lo cual viola las reglas de préstamo de Rust. Para solucionar el problema, podemos intentar separar las referencias mutables deself
en partes separadas, de modo que no sean prestadas simultáneamente. Un enfoque es usarRefCell
para permitir una mutabilidad interna:Aquí, declaramos el campo
connections
comoRefCell<><connection>>
, lo que nos permite obtener una referencia mutable al vector usandoborrow_mut()
. El métodohandle_new_connections()
toma esta referencia mutable como parámetro, junto con el clon desender_to_connector
.Ten en cuenta que también necesitamos usar
&mut receiver_from_peers
al llamar ahandle_incoming_message()
, ya que requiere una referencia mutable.Con estos cambios, el método
loop_fn()
debería poder ejecutarse sin el error de “préstamo mutable más de una vez”.