Rust 什么是未来::未来::懒惰?
在中,我们有以下片段: 外部板条箱东京; 外部板条箱期货; 使用futures::future::lazy; 东京:runlazy | |{ 因为我在0..4{ tokio::spawnlazymove | |{ println!你好,来自任务{},我; 好啊 }; } 好啊 }; 对此的解释是: 第一次轮询future时,lazy函数运行闭包。这里使用它来确保从任务调用tokio::spawn。如果没有lazy,将从任务上下文之外调用tokio::spawn,这将导致错误 尽管我对东京有一些熟悉,但我不确定自己是否准确地理解了这一点。似乎这两个懒人的角色略有不同,而这种解释只适用于第一个。在for循环中对lazy的第二次调用不正是为了将闭包转换为未来吗?lazy的用途包括: 创建一个新的未来,最终将与所提供的闭包所创建的未来相同 提供的闭包只有在future上安排了回调后才会运行,否则回调永远不会运行。然而,一旦运行,这个未来与闭包创建的未来是一样的 与普通闭包一样,它用于防止代码被急切地评估。在同步术语中,调用函数和调用函数返回的闭包之间的区别在于:Rust 什么是未来::未来::懒惰?,rust,future,rust-tokio,Rust,Future,Rust Tokio,在中,我们有以下片段: 外部板条箱东京; 外部板条箱期货; 使用futures::future::lazy; 东京:runlazy | |{ 因为我在0..4{ tokio::spawnlazymove | |{ println!你好,来自任务{},我; 好啊 }; } 好啊 }; 对此的解释是: 第一次轮询future时,lazy函数运行闭包。这里使用它来确保从任务调用tokio::spawn。如果没有lazy,将从任务上下文之外调用tokio::spawn,这将导致错误 尽管我对东京有一些熟
fn sync() -> impl FnOnce() {
println!("This is run when the function is called");
|| println!("This is run when the return value is called")
}
fn main() {
let a = sync();
println!("Called the function");
a();
}
与期货0.1相比:
use futures::{future, Future}; // 0.1.27
fn not_sync() -> impl Future<Item = (), Error = ()> {
println!("This is run when the function is called");
future::lazy(|| {
println!("This is run when the return value is called");
Ok(())
})
}
fn main() {
let a = not_sync();
println!("Called the function");
a.wait().unwrap();
}
如您所知,Tokio的示例使用lazy来:
确保闭包中的代码仅从执行器内部运行。
确保关闭是作为将来的一种方式运行的
我认为懒惰的这两个方面实际上是一样的
另见:
懒惰的目的包含在以下内容中:
创建一个新的未来,最终将与所提供的闭包所创建的未来相同
提供的闭包只有在future上安排了回调后才会运行,否则回调永远不会运行。然而,一旦运行,这个未来与闭包创建的未来是一样的
与普通闭包一样,它用于防止代码被急切地评估。在同步术语中,调用函数和调用函数返回的闭包之间的区别在于:
fn sync() -> impl FnOnce() {
println!("This is run when the function is called");
|| println!("This is run when the return value is called")
}
fn main() {
let a = sync();
println!("Called the function");
a();
}
与期货0.1相比:
use futures::{future, Future}; // 0.1.27
fn not_sync() -> impl Future<Item = (), Error = ()> {
println!("This is run when the function is called");
future::lazy(|| {
println!("This is run when the return value is called");
Ok(())
})
}
fn main() {
let a = not_sync();
println!("Called the function");
a.wait().unwrap();
}
如您所知,Tokio的示例使用lazy来:
确保闭包中的代码仅从执行器内部运行。
确保关闭是作为将来的一种方式运行的
我认为懒惰的这两个方面实际上是一样的
另见:
谢谢,我想你回答了我的问题。我应该提到的是,我已经阅读了lazy的文档,但还没有真正理解它,计划回调意味着什么?我们应该从示例片段中看到什么?感谢更新的答案,现在更清楚了!谢谢,我想你回答了我的问题。我应该提到的是,我已经阅读了lazy的文档,但还没有真正理解它,计划回调意味着什么?我们应该从示例片段中看到什么?感谢更新的答案,现在更清楚了!