2 个版本 (1 个稳定版)
1.0.0 | 2023年2月15日 |
---|---|
0.1.0 | 2021年1月28日 |
#673 在 并发
每月下载 24 次
在 4 个 Crates 中使用(通过 netmod-udp)
6KB
task-notify
包装器,当对包装值进行可变访问时唤醒任务。
这可以用来透明地通知异步任务,例如,它应该检查队列中的更多工作或再次尝试获取锁。
let c = Arc::new(Mutex::new(Notify::new(VecDeque::new())));
// task 1
async fn task_1() {
let mut mg = c.lock().await;
mg.push_back(42); // access via DerefMut
}
// task 2
impl Future for Task2 {
type Output = u64;
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
let mut lock = Box::pin(t.lock());
match Pin::new(&mut lock).poll(cx) {
Poll::Ready(ref mut mg) => match mg.pop_front() {
Some(v) => Poll::Ready(v),
None => {
// Insert a Waker when we can't make progress for the first time!
Notify::add_waker(mg, cx.waker().clone());
Poll::Pending
}
},
p => p, // The Mutex will wake us if we can make progress
}
}
}