Asynchronous &引用;借来的价值活得不够长。”;当使用tokio::spawn时,具有可变引用的未来

Asynchronous &引用;借来的价值活得不够长。”;当使用tokio::spawn时,具有可变引用的未来,asynchronous,rust,reference,borrow,tokio,Asynchronous,Rust,Reference,Borrow,Tokio,以下代码不编译b,因为编译器无法确保列表的hashmap\u足够长。我无法克服这一点 我尝试过使用Arc和Mutex,但由于some_func的异步方式和内部使用Mutex,我遇到了其他问题 使用期货;//0.3.5 使用std::collections::HashMap; 使用tokio;//0.2.21 异步fn some_func(_some_slice:&mut[String]){} #[tokio::main] 异步fn main(){ 让mut hashmap_of_list=has

以下代码不编译b,因为编译器无法确保列表的
hashmap\u
足够长。我无法克服这一点

我尝试过使用
Arc
Mutex
,但由于
some_func
的异步方式和内部使用
Mutex
,我遇到了其他问题

使用期货;//0.3.5
使用std::collections::HashMap;
使用tokio;//0.2.21
异步fn some_func(_some_slice:&mut[String]){}
#[tokio::main]
异步fn main(){
让mut hashmap_of_list=hashmap:::new();
让mut join_handles=Vec::new();
对于列表的hashmap_中的(u,value)。iter_mut(){
设future=some_func(值);
让join_handle=tokio::task::spawn(未来);
连接手柄。推动(连接手柄);
}
未来::未来::加入所有(加入句柄)。等待;
}
我得到这个错误

错误[E0597]:'hashmap\u of_list'的寿命不够长
-->src/main.rs:12:23
|
12 |对于列表的hashmap_中的(u,value)。iter_mut(){
|                       ^^^^^^^^^^^^^^^^-----------
|                       |
|借来的价值活得不够长
|参数要求为`'static借用`'hashmap\'of_list``
...
19 | }
|-'hashmap\u of_list'在仍然借用的情况下放在这里

tokio::task::spawn
需要一个
'静态的
未来,但是一个借用参考的未来不是
'静态的
。最理想的解决方案是将
用于iter()
而不是
iter\u mut()
,并将列表的所有权传递给您的未来,但我不知道这是否适合您的真实代码。异步有自己的互斥版本。看起来您的问题可能由的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以把这个问题标记为已经回答了。不过,我还是无法克服这个问题。使用互斥锁需要一个不必要的锁。至于into_iter,我仍然无法让借阅检查人员相信引用仍然指向有效地址。rodrigo建议代码