Rust 死机运行异步代码,同时丢弃代码
我有一个使用Rust 死机运行异步代码,同时丢弃代码,rust,async-await,rust-tokio,rusoto,Rust,Async Await,Rust Tokio,Rusoto,我有一个使用#[tokio::main]的应用程序,它在AWS的一个任务中创建了多个资源。我已经在Drop处理程序中实现了清理这些资源。但是,这些清理函数是异步的,因此我在上使用了block_,以确保它们在从drop返回之前同步运行 use futures::executor::block_on; struct EventQueue(pub String); impl Drop for EventQueue { fn drop(&mut self) { blo
#[tokio::main]
的应用程序,它在AWS的一个任务中创建了多个资源。我已经在Drop
处理程序中实现了清理这些资源。但是,这些清理函数是异步的,因此我在上使用了block_,以确保它们在从drop
返回之前同步运行
use futures::executor::block_on;
struct EventQueue(pub String);
impl Drop for EventQueue {
fn drop(&mut self) {
block_on(delete_queue(&self.0))
}
}
pub async fn delete_queue(queue_url: &str) {
let sqs = rusoto_sqs::SqsClient::new(REGION);
sqs.delete_queue(DeleteQueueRequest {
queue_url: queue_url.to_string(),
})
.await
.unwrap();
}
main
函数直到出现一个信号::ctrl_c().wait.unwrap()代码>完成,在此之后,我认为Tokio运行时将被删除,生成的任务将被取消。我认为与
上的block_的交互失败,因为运行时不再可用
以下是实现异步析构函数非常棘手,已经做了一些工作,但不运行drop
不被认为是一个bug。我发现在tokio 0.2.11中使用。防止了恐慌,并有了理想的行为。我想是因为选择代码>在运行时超出范围之前取消其他未来