У меня есть приложение, использующее #[tokio::main]
, которое создает несколько ресурсов на AWS в одной из своих задач. Я реализовал очистку этих ресурсов в обработчиках Drop
. Однако эти функции очистки имеют асин c, поэтому я использую 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
не возвращается, пока signal::ctrl_c().await.unwrap();
завершается, после чего я думаю, что время выполнения Tokio отбрасывается, а порожденные задачи отменяются. Я считаю, что взаимодействие с block_on
терпит неудачу, потому что среда выполнения больше не может использоваться.
Вот вывод pani c .