Asynchronous 如何锁定()。在非异步代码上等待futures::lock::Mutex let vpn_客户端:Arc=。。。 let on_virtual_tun_write=Arc::new( 移动| f:&mut-dyn-FnMut(&mut[u8]),大小:usize |->std::result::result{ 让mut buffer=vec![0;size]; f(buffer.as_mut_slice()); 匹配vpn_客户端_u.lock().wait.send(buffer.as_slice()) //...
正如您在上面的示例中所看到的,我有一个Asynchronous 如何锁定()。在非异步代码上等待futures::lock::Mutex let vpn_客户端:Arc=。。。 let on_virtual_tun_write=Arc::new( 移动| f:&mut-dyn-FnMut(&mut[u8]),大小:usize |->std::result::result{ 让mut buffer=vec![0;size]; f(buffer.as_mut_slice()); 匹配vpn_客户端_u.lock().wait.send(buffer.as_slice()) //...,asynchronous,rust,future,Asynchronous,Rust,Future,正如您在上面的示例中所看到的,我有一个Arc。我使用futures::lock::Mutex来处理异步代码中的其他内容,但是有一个库,它接受非async的,所以我不能lock()。在这个回调中等待这个互斥体 我怎样才能lock()。在一些async代码之外等待这个互斥体?这是一个好的解决方案吗?我不能使用非异步互斥体,因为代码的其余部分。这能回答你的问题吗? let vpn_client: Arc<futures::lock::Mutex<dyn VpnClient>&
Arc
。我使用futures::lock::Mutex
来处理异步代码中的其他内容,但是有一个库,它接受非async
的,所以我不能lock()。在这个回调中等待这个互斥体
我怎样才能lock()。在一些async
代码之外等待这个互斥体?这是一个好的解决方案吗?我不能使用非异步互斥体,因为代码的其余部分。这能回答你的问题吗?
let vpn_client: Arc<futures::lock::Mutex<dyn VpnClient>> = ...
let on_virtual_tun_write = Arc::new(
move |f: &mut dyn FnMut(&mut [u8]),size: usize| -> std::result::Result<(), VirtualTunWriteError> {
let mut buffer = vec![0; size];
f(buffer.as_mut_slice());
match vpn_client_.lock().await.send(buffer.as_slice())
//...