gpt4 book ai didi

rust - 在删除 Rust Future 时 panic 运行异步代码

转载 作者:行者123 更新时间:2023-12-03 11:25:17 24 4
gpt4 key购买 nike

我有一个应用程序使用 #[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函数直到 signal::ctrl_c().await.unwrap(); 才返回完成,之后我认为 Tokio 运行时被删除,并且产生的任务被取消。相信与 block_on的互动失败,因为运行时不再可用。

这是 panic output .

最佳答案

实现异步析构函数非常棘手,已经做了一些工作 here ,但没有运行 drop不被视为错误,"Exiting without calling destructors" .

关于rust - 在删除 Rust Future 时 panic 运行异步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59940976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com