问题标签 [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 - 是否有用于异步流的 tuple_windows() 适配器?
我有一个看起来像这样的代码
当我将频道更改为 atokio::mpsc::channel()
时,它变成了一个没有适配器rx
的异步流(即)futures::Stream
.tuple_windows()
你知道提供与 s 类似功能的 crateItertools
吗Stream
?如果没有,您如何建议这样做?
rust - 使用自定义 `futures::Stream` 链接适配器会破坏 trait bound
我需要实现一个Stream
在滑动窗口中产生项目的自定义(即 [1, 2, 3] => [(1, 2), (2, 3)])。所以我实现并给了它一个名为.tuple_windows()
. 允许以下代码
当最终类型没有实现特征时,我遇到了一个奇怪的情况Stream
。
代码(操场):
编译器错误也没有帮助,因为它只告诉我Stream
没有为新创建的类型实现:
我在这里想念什么?
rust - 从 rust 中的异步闭包调用存储的闭包
我有一个闭包,它可以改变在它之外设计的变量。我将如何调用这个从异步范围内修改状态的闭包?
我有以下代码(摘要,以显示问题):
产生以下内容:
现在,我相信我明白为什么会发生错误。我只是想不出办法解决这个问题。
对于上下文:
- 我有一个 websocket 客户端,我正在从流中读取
- 每次我从流中接收数据时,我都会对其进行转换
- 然后,我需要使用转换后的数据调用闭包,以便在其他地方使用——本质上就像 JavaScript 中的 EventEmitter。
我会以错误的方式解决这个问题吗?我是一名 JavaScript 开发人员,所以我不得不在这里改变我的思维方式。
rust - 限制 join_all!() 中的并发期货数量
如何让 Rust 执行所有给定的期货(如join_all!
)限制一次执行 10 个期货?
我需要从大量服务器下载文件,但同时查询不超过 10 个服务器(以准确测量它们的超时:如果我一次查询太多服务器,它们会超时,即使服务器本身速度很快)。
rust - 跨线程移动任务时 Rust Async Executor 内存排序保证?
这是关于 Rust 异步生态系统内的内存排序保证的一个相当基本的问题。但是,我似乎在任何地方都找不到明确的答案。
C++ 内存排序从基于线程的角度指定内存排序:
发布-获取排序
如果线程 A 中的原子存储标记为 memory_order_release,并且线程 B 中来自同一变量的原子加载标记为 memory_order_acquire,则从线程的角度来看,在原子存储之前发生的所有内存写入(非原子和宽松原子) A,在线程 B 中成为可见的副作用。也就是说,一旦原子加载完成,线程 B 保证可以看到线程 A 写入内存的所有内容。
各种 Rust 异步执行器支持跨线程移动任务.await
。一个自然的场景是:
Relaxed
任务 A 位于线程 1 并在变量 处执行存储x
。- 任务 A
.await
命中 - 任务 A 被移动到线程 2 并被唤醒。
Release
然后在变量处执行存储y
。 - 任务 B 位于线程 3 并在变量处执行
Acquire
加载y
。
问题是:线程 1 的存储是否保证在加载Relaxed
后在任务 B 中可见?Acquire
例如,如果线程 3 的任务 B之后Relaxed
在变量处执行了负载x
,是否可以保证任务 A 的副作用是可见的?
这应该取决于每个异步执行器的任务调度程序中同步机制的实现。任何熟悉它们的人都会受到赞赏。
asynchronous - Rust 习惯用法相当于在 `async` 块中修改结构的字段
我正在使用结构来跟踪状态并Future
为其实现特征。
借用检查器将没有它,因为async
块可变地借用self
并且编译器不允许self
第二次可变地借用。这是期望的行为。
我的问题是:在一个块中修改一个结构上的一个字段async
并将这个计算的结果保存到这个结构上的另一个字段的 Rust 习惯用法是什么?
添加一些上下文:stream
由其他两个流构建。一旦聚合了足够多的元素,我们希望能够保存来自stream
in的连续元素以供访问。storage
我希望这样的功能在板条箱中的某个地方,但是futures
方法futures::stream::StreamExt
并不完全适合我的用例。buffered
buffer_unordered
http - Rust Hyper 和 Futures
我开始在 Rust 上使用 Hyper。我写了一个简单的代码(基于Hyper cannot find Server module),它似乎就在那里,但遇到了一些意想不到的问题。这是最小化的代码片段,应该很容易重现。目前有 5 个错误,标有 ISSUE 注释:
问题是:
- 在模块中找不到函数运行
hyper::rt
- 相关类型 Error 和 Item not found
futures::Future
- 类型注释需要
future::ok
- 没有为 struct Server 找到名为 map_err 的方法
- 特质界
for<'a> [closure@src\main.rs:58:32: 64:6]: Service<&'a AddrStream> is not satisfied
我的货物.toml:
如何编译我的示例?任何提示将不胜感激!