Module driver

Source
Expand description

此模块用于管理操作生命周期.

所有的 Op 在其生命周期中都存放在 Driver 之中,Driver::submit 是它们生命周期的开始,而 Driver::complete 是生命周期的结束.

Op 在其生命周期中往往需要与 Driver 交互,DriverHandle 定义了如何访问它所在的 Driver

以下演示了操作生命周期的基本管理流程,

let drv = Rc::new(Driver::<()>::new());
//        ^ 默认情况下,Weak 实现了 DriverHandle
let id = drv.submit();
//           ^ 提交请求,这里是 Op 生命周期的开始
let mut op = pin!(Op::new(Rc::downgrade(&drv), id, Noop));
//      ^ Op 本身实现了 Future 以便于在异步函数中使用
assert!(op.as_mut().poll(&mut cx).is_pending());
//                                ^ 在响应前 Op 不会 ready
assert!(drv.complete(id, ()).is_ok());
//          ^ 提交响应,这里是 Op 生命周期的结束,同时它所在的 Future 被唤醒
assert!(op.as_mut().poll(&mut cx).is_ready());
//                                ^ 响应后 Op 立即就绪

Structs§

Driver
OpId

Traits§

DriverHandle