#future #async #heap-allocation #no-std

no-std stackfuture

StackFuture 是围绕 futures 的包装器,它将包装的 futures 存储在调用者提供的空间中

4 个版本 (2 个重大更新)

0.3.0 2022年11月17日
0.2.0 2022年9月7日
0.1.1 2022年8月15日
0.1.0 2022年8月10日

#534 in 异步

Download history 983/week @ 2024-03-14 161/week @ 2024-03-21 132/week @ 2024-03-28 112/week @ 2024-04-04 167/week @ 2024-04-11 135/week @ 2024-04-18 169/week @ 2024-04-25 199/week @ 2024-05-02 197/week @ 2024-05-09 218/week @ 2024-05-16 162/week @ 2024-05-23 205/week @ 2024-05-30 208/week @ 2024-06-06 201/week @ 2024-06-13 210/week @ 2024-06-20 658/week @ 2024-06-27

每月1,313次下载
asynchelp 中使用

MIT 许可证

28KB
335

StackFuture

crates.io docs.rs

此包定义了一个 StackFuture 包装器,它将 futures 存储在调用者提供的空间中。这可以用来在不要求堆分配的情况下模拟动态异步特性。下面是使用 StackFuture 的示例

use stackfuture::*;

trait PseudoAsyncTrait {
    fn do_something(&self) -> StackFuture<'static, (), { 512 }>;
}

impl PseudoAsyncTrait for i32 {
    fn do_something(&self) -> StackFuture<'static, (), { 512 }> {
        StackFuture::from(async {
            // function body goes here
        })
    }
}

async fn use_dyn_async_trait(x: &dyn PseudoAsyncTrait) {
    x.do_something().await;
}

async fn call_with_dyn_async_trait() {
    use_dyn_async_trait(&42).await;
}

这最有用的情况是在需要 dyn Trait 对象中的异步函数,但将它们存储在 Box 中不可行的情况下。此类情况包括嵌入式编程,其中分配不可用,或者在性能开销不可接受的紧密循环中。请注意,这样做需要权衡。在 StackFuture 的情况下,您必须设置编译时限制,以支持将支持的最大 future 大小。如果您需要支持 dyn Trait 对象中的异步函数,但这些限制不适用于您,您可能更适合使用 async-trait 包。

贡献

此项目欢迎贡献和建议。大多数贡献都需要您同意贡献者许可协议(CLA),声明您有权利,并且实际上确实授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com

当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA,并相应地装饰 PR(例如,状态检查,评论)。只需遵循机器人提供的说明即可。您只需在所有使用我们的 CLA 的存储库中这样做一次。

本项目采用了微软开源行为准则。如需更多信息,请参阅行为准则常见问题解答,或通过[email protected]联系以提出任何额外的问题或评论。

商标

本项目可能包含项目、产品或服务的商标或标志。微软商标或标志的授权使用必须遵循微软的商标与品牌指南。在本项目的修改版本中使用微软商标或标志不得引起混淆或暗示微软赞助。任何第三方商标或标志的使用均受其相关政策约束。

无运行时依赖