我正在尝试在 Rust 中构建一个非常基本的异步回调函数示例:
extern crate tokio;
extern crate tokio_core;
extern crate tokio_io;
use std::error::Error;
use tokio::prelude::future::ok;
use tokio::prelude::Future;
fn async_op() -> impl Future<Item = i32, Error = Box<Error>> {
ok(12)
}
fn main() {
let fut = async_op().and_then(|result| {
println!("result: {:?}", result);
});
tokio::run(fut);
}
这总是会导致编译器错误:
error[E0106]: missing lifetime specifier
--> src/main.rs:9:54
|
9 | fn async_op() -> impl Future<Item = i32, Error = Box<Error>> {
| ^^^^^ expected lifetime parameter
|
= help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
= help: consider giving it a 'static lifetime
为什么首先会出现终身错误?为什么它只适用于Error
而不适用于Item
?
我也不确定“帮助:考虑给它一个“静态生命周期”——AFAICT 这将导致整个程序执行过程中返回值的生命周期,这绝对不是我在更复杂的示例中想要的。