2 个版本
0.1.1 | 2024年8月16日 |
---|---|
0.1.0 | 2024年8月16日 |
#17 在 #short
1,151 每月下载量
10KB
181 行
短生命周期的 Future
short_future 是一个库,定义了用于处理 Future 生命周期的工具:ShortBoxFuture<'a, 'b, T>
可以同时捕获具有 'a
和 'b
生命周期的借用。
ShortBoxFuture
通过绕过 HRTBs 和显式生命周期限制来解决限制。这在包装异步闭包时很有用,其中闭包返回的 Future 同时依赖于
- 封装作用域中的引用,具有生命周期 'a。
- 闭包参数中的引用,具有生命周期 'b。
例如,您可以编写一个辅助程序,用于重试数据库操作,其中每次重试都会创建一个新的事务,并且数据是从封装作用域中借用的
async fn run_twice<'a>(&'a self, f: F) -> anyhow::Result<()>
where F: for<'b> Fn(&'b mut Transaction) -> ShortBoxFuture<'b, 'a, anyhow::Result<()>>
{
for i in 0..2 {
let mut tx = self.begin();
f(&mut tx).0.await?;
}
Ok(())
}
async fn go(&self) {
let data = get_data();
self.run_twice(|tx| async {
tx.get(&data.id).await;
}.into()).await
}
请参阅测试用例以获取更多示例,以及需要 ShortBoxFuture
的问题的演示。
依赖关系
~1MB
~15K SLoC