我将尝试向
下面是我想出的解决方案,但在我看来似乎不太理想(或线程安全):
Vec<T>
添加一个项目,调用一个函数并等待它。 我仍在理解所有权和借用规则。 我了解以下代码行不起作用:pub async fn begin_session(&mut self, stream: TcpStream) {
let session = Session::new(stream);
self.sessions.push(session);
session.start_receiver().await; // obviously, won't work
}
下面是我想出的解决方案,但在我看来似乎不太理想(或线程安全):
pub async fn begin_session(&mut self, stream: TcpStream) {
let session = Session::new(stream);
self.sessions.push(session);
let session = self.sessions.last().unwrap();
session.start_receiver().await; // That works.
}
Vec<T>
中是否有一个函数可以执行 push(T)
并返回 T
呢?
self.sessions.push(session.clone());
。 - Deedee Megadoodooself
的可变引用,因此您可以确信在push
和last
之间self.sessions
不会改变。 - eggyal