究竟什么是 future
特别的,future 是一系列的异步操作所表示的一个值。future crate 的文档中将其定义为『一个尚未准备好的值的代理对象』。Rust 中的 futures 允许你将一个任务,比如说网络调用或者计算任务,定义成异步执行的。你可以在该任务的返回值上串联一些函数,用于转换结果,处理错误,和其它的 future 的返回值进行合并,或者一些很多的针对返回值的其它操作。这些函数只有在 future 被传递给一个 exectutor 时才会运行,比如 Tokio 库中的 run
函数。事实上,如果你在 future 超出它的作用域之前不去调用它,什么都不会发生。基于这个原因,future crate 将 future 声明为 must_use
,这样的话,如果你在 future 离开它的作用域之前都没有消费它,编译器就会发出警告。
如果你熟悉 JavaScript 中的 promises 的话,你可能会对 future 的这些特性感到奇怪。在 JavaScript 中,promises 只能通过 event loop
来运行,没有其它的选择。JS 中的 'executor' 函数是立即执行的,但本质上,promise 仅仅是简单定义了一些延后执行的一系列指令。在 Rust 中,你可以使用多种异步策略来运行 executor。
网友评论