Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何使用Tokio远程关闭正在运行的任务_Rust_Rust Tokio - Fatal编程技术网

Rust 如何使用Tokio远程关闭正在运行的任务

Rust 如何使用Tokio远程关闭正在运行的任务,rust,rust-tokio,Rust,Rust Tokio,我有一个UDP套接字正在接收数据 pub async fn start() -> Result<(), std::io::Error> { loop { let mut data = vec![0; 1024]; socket.recv_from(&mut data).await?; } } pub async fn start()->结果{ 环路{ 让mut data=vec![0;1024]; socket.re

我有一个UDP套接字正在接收数据

pub async fn start()  -> Result<(), std::io::Error> {
    loop {
        let mut data  = vec![0; 1024];
        socket.recv_from(&mut data).await?;
    }
}
pub async fn start()->结果{
环路{
让mut data=vec![0;1024];
socket.recv_from(&mut data)。等待?;
}
}

此代码当前在
上被阻止。当没有数据输入时,等待
。我想从我的主线程优雅地关闭我的服务器,那么我如何向这个
发送信号。等待它停止睡眠并关闭?

注意:这个答案目前链接到1.x版本的Tokio,但也适用于Tokio 0.2和0.3

如果要终止多个任务,则应使用发送关闭消息。你可以和它一起使用


作为
JoinHandle::abort
的替代方法,您可以从futures板条箱使用。生成任务时,请执行以下操作:

let (task, handle) = abortable(start());
tokio::spawn(task);
然后,您可以稍后通过调用
abort
方法终止任务

handle.abort();
当然,有
选择的频道
还可用于终止单个任务,可能与频道(而不是广播频道)组合使用


所有这些方法都保证
real\u start
方法在
等待时被终止。当任务在两个
之间运行代码时,无法终止任务。请等待
s。你可以阅读更多关于这是为什么的信息

该项目包含一个可访问的服务器正常关闭的真实示例。此外,Tokio教程中有关于和的章节。

您可以使用来同时等待数据和关机信号(您可以使用)。
let (task, handle) = abortable(start());
tokio::spawn(task);
handle.abort();