🛑 Stop Button
Command Line
Web
Desktop
> deploy_
🗄️🗄️🌐
x
go
❌ Don't
let outcome = tokio::select! {
value = process.next() => Outcome::Done(value),
_ = tokio::signal::ctrl_c() => Outcome::Interrupted,
};
✅ Do
struct InterruptSignal;
let (interrupt_tx, interrupt_rx) = tokio::sync::mpsc::<InterruptSignal>(8);
let outcome = tokio::select! {
value = process.next() => Outcome::Done(value),
_ = interrupt_rx.recv() => Outcome::Interrupted,
};
and:
// CLI
tokio::spawn(async move {
tokio::signal::ctrl_c().await.unwrap();
let _ = interrupt_tx.send(InterruptSignal).await;
});
// Web / Desktop
async fn handle_request(request: Request) -> Response {
match request {
Request::Interrupt { execution_id } => {
let executions = executions.lock().await;
let execution = executions.get(execution_id);
let interrupt_tx = execution.interrupt_tx();
let _ = interrupt_tx.send(InterruptSignal).await;
}
// ..
}
}