Rust 如何将tokio::timer::Timeout与Future::wait一起使用?

Rust 如何将tokio::timer::Timeout与Future::wait一起使用?,rust,rust-tokio,Rust,Rust Tokio,我正在尝试使用以下方法在RPC请求中引入超时: 如果我用_timeout和tokio::run() 但是,在带有超时的任务上调用wait会导致任务出现错误: 线程“main”在“delay error”时惊慌失措;错误=错误(关闭)' 而不是 超时命中错误(已过) 我不理解使用tokio::run()和wait()之间的区别 如何使用wait使代码工作 我不会,你也可能就是做不到 阅读定时器模块的文档: 这些类型必须在运行时的上下文中使用,或者必须明确设置计时器上下文。有关如何设置计时器上

我正在尝试使用以下方法在RPC请求中引入超时:

如果我用_timeout和tokio::run()

但是,在带有超时的
任务上调用wait会导致
任务
出现错误:

线程“main”在“delay error”时惊慌失措;错误=错误(关闭)'
而不是

超时命中错误(已过)
我不理解使用
tokio::run()
wait()
之间的区别


如何使用
wait
使代码工作

我不会,你也可能就是做不到

阅读
定时器
模块的文档:

这些类型必须在
运行时的上下文中使用,或者必须明确设置计时器上下文。有关如何设置计时器上下文的详细信息,请参阅

按照线程,我们得到了需要一个Tokio执行器和一个
定时器的线程。执行器使用类型,该类型本身希望阻止未来

所有这些都意味着东京的未来可能依赖于纯执行者之外的特性。如果我正确理解了这些术语(很可能我没有),那么这些特性是由反应堆提供的。调用
wait
不知道这一点

另见:

use std::time::{Duration, Instant};
use tokio::prelude::*;
use tokio::timer::Delay;

fn main() {
    let when = Instant::now() + Duration::from_millis(4000);
    let task = Delay::new(when)
        .and_then(|_| {
            println!("Hello world!");
            Ok(())
        })
        .map_err(|e| panic!("delay errored; err={:?}", e));

    let task_with_timeout = task
        .timeout(Duration::from_millis(3000))
        .map_err(|e| println!("Timeout hit {:?}", e));
    let _ = task_with_timeout.wait().expect("Failure");
    // tokio::run(task_with_timeout);
}