Rust tokio::与tokio::net::UnixStream panics异步运行

Rust tokio::与tokio::net::UnixStream panics异步运行,rust,rust-tokio,Rust,Rust Tokio,东京:运行异步+期货0.3+东京:网络:UnixStream 安装程序 代码 跑 运行`target/debug/main bin main` 线程“tokio-runtime-worker-0”因“尚未实现”而惊慌失措:异步等待预览当前仅支持futures 0.1。如果要使用futures 0.3',/Users/.cargo/registry/src/github.com-1ec6299db9ec823/tokio-async-await-0.1.6/src/compat/backward,

东京:运行异步+期货0.3+东京:网络:UnixStream

安装程序 代码 跑
运行`target/debug/main bin main`
线程“tokio-runtime-worker-0”因“尚未实现”而惊慌失措:异步等待预览当前仅支持futures 0.1。如果要使用futures 0.3',/Users/.cargo/registry/src/github.com-1ec6299db9ec823/tokio-async-await-0.1.6/src/compat/backward,请使用futures 0.3的兼容层。rs:76:5
注意:使用'RUST_BACKTRACE=1'环境变量运行以显示回溯。
线程“tokio-runtime-worker-1”因“尚未实现”而惊慌失措:异步等待预览当前仅支持futures 0.1。如果要使用futures 0.3',/Users/.cargo/registry/src/github.com-1ec6299db9ec823/tokio-async-await-0.1.6/src/compat/backward,请使用futures 0.3的兼容层。rs:76:5
编译器强制我使用futures 0.3

  • 等待!()
    需要futures 0.3(不使用futures 0.1编译)
  • async{}
    块需要期货0.3(因为
    await!(async{})
    工作)
  • tokio::run_async
    需要futures 0.3(不使用futures 0.1编译)
  • 期货0.3似乎与期货0.1有些不兼容。 有解决办法吗?

    工作解决方案 中的代码段工作正常

    使用期货:{Future,FutureExt};
    使用futures::compat::compat;
    东京大学公共图书馆(未来:F){
    tokio::spawn(Compat::new(Box::pin(
    future.map(|()|->结果{Ok(())})
    )));
    }
    
    等待中使用期货0.3
    (不是
    tokio::wait
    ),并使用这些函数,而不是
    tokio::run\u async、tokio::spawn\u async

    非工作溶液 错误消息建议使用futures 0.1,但将futures 0.3转换为0.1并使用
    tokio::Wait不起作用:

    使用东京::等待;
    ...
    等待!(未来03.进入等待中);
    


    我遇到了类似的问题。我正在使用以下实用程序使0.3 futures在Tokio运行时上可运行:

    fn compat<F: StdFuture + Send + 'static>(f: F) -> impl Future<Item=F::Output, Error=()> {
        f.unit_error().boxed().compat()
    }
    
    fn兼容
    
    #![feature(await_macro, async_await, futures_api)]
    
    use tokio::net::UnixStream;
    use tokio::net::UnixListener;
    use futures::compat::Future01CompatExt;
    use futures::compat::Stream01CompatExt;
    use futures::StreamExt;
    
    fn main() {
        let _ = std::fs::remove_file("/tmp/test.sock");
    
        tokio::run_async(async {
            let fut = UnixListener::bind(&"/tmp/test.sock").unwrap().incoming().compat();
            let fut = fut.for_each(|stream| {
                let _ = stream;
                println!("new conn");
                futures::future::ready(())
            });
            tokio::spawn_async(fut);
    
            let fut = UnixStream::connect(&"/tmp/test.sock").compat();
            let _conn = await!(fut);
        });
    }
    
    thread 'tokio-runtime-worker-0' panicked at 'not yet implemented: async-await-
    preview currently only supports futures 0.1. Use the compatibility layer of futures 0.3 instead, if you want to use futures 0.3.', /Users/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-async-await-0.1.6/src/compat/backward.rs:76:5
    
    fn compat<F: StdFuture + Send + 'static>(f: F) -> impl Future<Item=F::Output, Error=()> {
        f.unit_error().boxed().compat()
    }