Rust 如何使用Tokio远程关闭正在运行的任务
我有一个UDP套接字正在接收数据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
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();