问题标签 [rust-futures]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 推送 SelectAll 流
我想要一个结构来处理一些流。所有流共享同一个 Item。逻辑如下:我需要创建一个独特的流,其中包含来自所有其他流的所有项目。我还需要将“新”流添加到“主”流中。我不在乎下一个项目来自哪个流。
为此,我看到select_all
了应该执行上述逻辑的函数。
但我收到这些错误:
我究竟做错了什么?否则我如何存储多个流并对其进行迭代?
rust - 为什么 futures::lock::Mutex 没有实现 RefUnwindSafe
futures::lock::Mutex
没有实现RefUnwindSafe
特征(参见https://docs.rs/futures/0.3.17/futures/lock/struct.Mutex.html#impl-RefUnwindSafe)
为什么不安全通过一个futures::lock::Mutex
里面std::panic::catch_unwind
?
可重现的代码:
可以futures::lock::Mutex
实现RefUnwindSafe
trait 吗?
rust - 我怎样才能`fut.await`在“后台”运行未来(执行但不等待它)?
我希望能够在后台启动未来运行,而不是立即在父函数范围内等待它。
类似于动态的东西join_all
,我可以在循环中将新期货添加到集合中,然后将集合传递给另一个函数,该函数可以等待整个集合(已经在运行)。
我希望能够做这样的事情:
但问题是:
.await
开始执行未来,但也在当前函数处等待它。- 如何在不等待的情况下开始执行?
&c
不是'static
- 似乎是所有 Tokio API 的要求,即“开始未来执行而不等待当前 fn 范围内的结果”,例如
spawn_local
- 如果所有期货都在一个线程上,那就可以了。
- 似乎是所有 Tokio API 的要求,即“开始未来执行而不等待当前 fn 范围内的结果”,例如
例子:
rust - 手动期货和 aysnc 移动:即使我正在克隆类型,它的寿命也不够长
我有这个功能正在对手动创建的期货做一些工作。
我收到错误:
我不想做P
静态,但我不介意克隆我的解决方案。我的理解是 usingasync move
应该移动参数并获得所有权,所以我不需要 P 上的任何生命周期。但显然生命周期仍然存在一些奇怪的事情。
有什么建议么?
rust - 如何从同时工作的for循环中收集多个结果?
我想运行一个有很多不同变量的函数
假设我的功能是:
我想为许多输入运行这个函数;假设我的输入是
由于该函数花费了一些周期,我希望尽可能同时运行所有输入。所以我可以像这样运行
到目前为止,一切都很好; 我用这个函数运行了所有的输入并得到我的输出stdout
。但是,如果我希望将输出写入某个输出文件怎么办?
我无法打开文件并在do_the_hard_job
函数中附加到它。那会搞砸的。我无法将文件添加为参数,因为该方法将同时运行,哪个将借用可变文件。
我尝试返回值而不是在方法中打印,然后收集返回的值;像这样 :
可悲的是,这没有奏效。我可以尝试什么来实现我的目标?
编辑:我为这个问题准备了一个复制器:https ://github.com/kursatkobya/bite-sized-qualms/tree/main/concurrent-write
rust - 如何在不使用 OptionFuture 的情况下在 `Option::and_then` 或 `Option::map` 的闭包中使用 async/await?
我想运行类似下面的代码:
但它不起作用,因为 await 只能在异步块或函数中使用。另一方面,如果我使用异步块,则闭包将返回impl Future<Output = Option<_>>
这是不允许的,因为Option::and_then
只允许Option
作为返回类型。
我知道的唯一选择是使用OptionFuture
,创建一个中间变量,.map
而不是.and_then
.
但这确实很麻烦,并且使我无法使用许多可以对 Options、Results 或类似内容进行操作的函数,例如Option::and_then
.
没有更好的办法吗?
rust - tokio::join 返回特征类型的映射期货有错误“`FnOnce` 的实现不够通用”
我已经开始了多项任务,tokio::spawn
我想收集他们退出的原因dyn std::error::Error
。
如果任何任务恐慌,我想立即转发恐慌而不等待其他任务。为了实现这一点,我曾经在传播恐慌时futures::map
展开。tokio::JoinHandle
然后我过去常常tokio::join!
同时等待所有期货。
它给了我一个编译错误:
我正在与rustc 1.56.1 (59eed8a2a 2021-11-01)
. 我的 Cargo.toml 有:
我希望了解此错误或至少找到替代解决方案。
rust - 如何包装动态类型的流以方便 API?
我正在寻找为返回某种类型的任何流实现包装器结构,以减少乱扔我的应用程序的动态关键字。我遇到过BoxStream
,但不知道如何在Stream::poll_next
. 这是我到目前为止所拥有的:
依赖项:
期货=“0.3”
rust - 等待同一个未来时,Rust 需要静态生命周期吗?
我正在尝试从服务器获取 OAuth 令牌,所以我创建了一个名为Token
. 为了在令牌过期时只保留一个请求,我为请求的未来保留了一个参考,让其他请求继续等待它返回。游乐场:
我对生命周期错误感到困惑:
我不想保持静止;我希望它的生命周期与结构相同。
- 是解决问题的正常方法吗?
- 如何更正代码?
asynchronous - Rust 方法链和异步助手
我还在学习 Rust,我正在做的一个练习是移植一个我在其他语言中使用过的“流利的构建器”~esque 模式。例如:
允许我编写一个端点处理程序,例如:
不幸的是,上面的类型签名CalculationResult::log_to_file
是一个谎言。它实际上不需要消耗self
。原来它只需要&self
为了能够登录到文件。但是,为了保持流畅的风格,我们仍然需要 return self
。该怎么办?
重构 1:拯救的特征
更新log_to_file
以拥有其真正的签名
并添加一点 trait 魔法来提供“副作用”辅助方法
现在处理程序可以写成:
很容易,但下一个挑战随之而来。假设我们想要将信息保存到数据库,而不是记录到本地文件。
重构 2:进入异步
CalculationResult
现在可以将自己保存到远程数据库中,而不是记录到文件中:
我想更新处理程序以适应这种异步副作用,同时保持流畅界面的精神完好无损:
不幸的是,这就是我在 Rust 方面的技能达不到要求的地方。直觉上,我认为这是可能的,因为最终会CalculationResult
比未来更长久persist
。
问题:你如何实现一个AsyncSideEffect
特征?
您如何更新SideEffect
以便它可以采用产生的函数Future<Output=Result<(), E>>
?如果async
特性中允许使用函数,它可能是这样的:
但是您今天在 Rust Stable 2021 中如何做到这一点?
编辑:缩小范围(无特征助手)
与其在特征中处理异步功能的开销,让我们通过引入一个结构来将其简化为一个更简单的情况,我们可以在其中添加一个异步函数到它的impl
更新处理程序以显式构建此帮助器对象,如下所示:
导致编译器给出一个生命周期错误:
是否可以Holder
使用生命周期注释或额外的块来更新 struct 或 impl 以使其编译?