我有一个使用 的应用程序#[tokio::main],它在 AWS 上的一项任务中创建了多个资源。Drop我已经在处理程序中实现了清理这些资源。但是这些清理函数是异步的,所以我block_on用来确保它们在从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函数在 a 完成之前不会返回signal::ctrl_c().await.unwrap();,之后我认为 Tokio 运行时被删除,并且生成的任务被取消。我相信与的交互block_on失败,因为运行时不再可用。
这是恐慌输出。