Rust 当轮询读取';s缓冲区没有足够大小的缓冲区?

Rust 当轮询读取';s缓冲区没有足够大小的缓冲区?,rust,Rust,Rust的未来使用poll_read()来轮询可用数据: fn poll_read( &mut self, cx: &mut Context, buf: &mut [u8] ) -> Result<Async<usize>, Error> 您可以看到,在buf上没有足够空间的情况下,我只复制了所需的数据,然后将剩余的数据存储在我们的结构上。因此,我们可以在从互联网获取新数据之前,让它检查是否还有剩余的数据要写入,

Rust的未来使用
poll_read
()来轮询可用数据:

fn poll_read(
    &mut self, 
    cx: &mut Context, 
    buf: &mut [u8]
) -> Result<Async<usize>, Error>

您可以看到,在
buf
上没有足够空间的情况下,我只复制了所需的数据,然后将剩余的数据存储在我们的结构上。因此,我们可以在从互联网获取新数据之前,让它检查是否还有剩余的数据要写入,从而增强这种
轮询读取
。但正如您在我的评论中所看到的:
如何让未来的调用者知道需要再次调用poll\u read来读取剩余的数据?在轮询读取过程中,我可以调用cx.waker().wake()吗?

您无需执行任何操作。文件内容如下:

如果没有可读取的数据,该方法将返回
Poll::Pending
,并安排当前任务在对象变得可读或关闭时接收通知

如果它返回数据,则不需要安排唤醒它。例如,只遵从
io::Read
并完全忽略
上下文
,而不管缓冲区是否足够大

轮询器应该知道,在
poll\u read
返回
poll::Ready(Ok(0))
之前,可能还有数据要读取

fn poll_read(
    &mut self, 
    cx: &mut Context, 
    buf: &mut [u8]
) -> Result<Async<usize>, Error> {
    let my_buffer = get_buffer_from_internet();
    if my_buffer.len() <= buf.capacity() {
        buf.put_slice(my_buffer);
        return Poll::Ready(my_buffer.len());
    } else {
        //we can only fill buf partially
        buf.put_slice(my_buffer);
        //let's store the remaining in our struct
        self.remaining.store(&my_buffer[buf.len()..]);
        //How can I make the future caller know it needs to call poll_read again to read the remaining data? Can I call cx.waker().wake() while inside the poll_read?
        return Poll::Ready(buf.len());
    }
}