小编fro*_*net的帖子

每次调用 Future::poll 时都需要注册一个新的唤醒器吗?

我正在制作自己的通道实现,但std::task::Context没有明确唤醒器是如何生成的。

我的假代码:

struct MyAtomicWaker {
    lock: SpinLock,
    is_waked: AtomicBool,
    waker: std::task::Waker, 
}

struct WeakAtomicWaker (Weak<MyAtomicWaker>)

impl MyAtomicWaker {
    fn is_waked(&self) -> bool {}
    fn weak(self: Arc<MyAtomicWaker>) -> WeakAtomicWaker;
    fn cancel(&self) {}  // nullify WeakAtomicWaker, means the waker is not waked by a future
}

impl WeakAtomicWaker {
    fn wake(self) {}  // upgrade to arc and can wake only once when waker not cancelled
}

struct ReceiveFuture<T> {
    waker: Option<Arc<MyAtomicWaker>>,
}

impl<T> Drop for ReceiveFuture<T> {
    fn drop(&mut self) …
Run Code Online (Sandbox Code Playgroud)

future rust async-await rust-tokio

1
推荐指数
1
解决办法
2220
查看次数

标签 统计

async-await ×1

future ×1

rust ×1

rust-tokio ×1