提问人:frank C 提问时间:10/30/2023 最后编辑:cafce25frank C 更新时间:10/30/2023 访问量:87
如何捕捉异步函数的恐慌?
How to catch panic for a async function?
问:
我想尝试捕捉异步函数的恐慌,如下所示:
let x = a_sync_function(param1, param2).await?;
// the return of `a_sync_function` is : Result<Vec<serde_json::Value>, Box<dyn Error>>
如果在上面的代码运行时出现任何恐慌,我想抓住恐慌并运行另一个代码; 我该怎么做?
答:
3赞
Chayim Friedman
10/30/2023
#1
catch_unwind()
不带未来,所以你不能使用它。
幸运的是,有 FutureExt::catch_unwind(),
它用恐慌捕捉来包装未来。在后台,它用于每个 poll()。
futures
catch_unwind()
use futures::FutureExt;
let x = a_sync_function(param1, param2).catch_unwind().await;
// `x` is now `Result<Result<Vec<serde_json::Value>, Box<dyn Error>>, Box<dyn Any + Send>>`
// The inner `Result` is the normal return type of the function,
// the outer `Result` is `Err` if a panic occurred with the panic payload.
评论
0赞
frank C
10/30/2023
完善!它对我来说效果很好。
评论