我想将一些 aysnc 操作存储在哈希表中。然后根据用户输入的字符串列表获取异步操作列表。通过搜索网站,我发现了这个问题
不同之处在于我想在不同的 tokio 线程中使用存储操作哈希图。所以我用 once_cell + RwLock 重写。
static MAPS: Lazy<Arc<RwLock<HashMap<&'static str, CalcFn>>>> = Lazy::new(|| {
let map = Arc::new(RwLock::new(HashMap::new()));
let mut map_lock = map.write().unwrap();
map_lock.insert(
"add",
Box::new(
move |a: i32, b: i32| -> Pin<Box<dyn Future<Output = BoxedResult<i32>>>> {
Box::pin(add(a, b))
},
) as CalcFn,
);
map_lock.insert(
"sub",
Box::new(
move |a: i32, b: i32| -> Pin<Box<dyn Future<Output = BoxedResult<i32>>>> {
Box::pin(sub(a, b))
},
) as CalcFn,
);
map.clone()
});
延迟初始化看起来很无聊并且占用很多行代码,因为我可能有 20 多个异步操作。
有人能否提供一些评论以便以“更清晰”的方式编写此示例?