gpt4 book ai didi

rust - 为什么放弃这个 SpawnHandle 不会取消它的 future ?

转载 作者:行者123 更新时间:2023-11-29 07:58:37 25 4
gpt4 key购买 nike

这是一个示例程序:

extern crate futures;
extern crate tokio_core;

use futures::{Async, Future, Stream};
use tokio_core::reactor::Core;
use tokio_core::net::TcpListener;

fn main() {
let mut core = Core::new().unwrap();

futures::sync::oneshot::spawn(
TcpListener::bind(&"127.0.0.1:5000".parse().unwrap(), &core.handle())
.unwrap()
.incoming()
.for_each(|_| {
println!("connection received");
Ok(())
}),
&core,
);

let ft = futures::future::poll_fn::<(), (), _>(|| {
std::thread::sleep_ms(50);
Ok(Async::NotReady)
});

core.run(ft);
}

如您所见,我调用了 oneshot::spawn,然后立即删除了它的返回值,理论上应该会取消其中包含的 future。然而,当我运行这个程序然后连接到 127.0.0.1:5000 时,它仍然打印“connection received”。为什么要这样做?我预计它不会打印任何内容并删除 TcpListener,从端口解除绑定(bind)。

最佳答案

这是一个(现已修复)bug in the futures crate ;版本 0.1.18 应该包含修复。

它在 SpawnHandle/Executor 中为 keep_running: bool 使用了反转值。

关于rust - 为什么放弃这个 SpawnHandle 不会取消它的 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com