问题标签 [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.

0 投票
2 回答
56 浏览

rust - 是否有用于异步流的 tuple_windows() 适配器?

我有一个看起来像这样的代码

当我将频道更改为 atokio::mpsc::channel()时,它变成了一个没有适配器rx的异步流(即)futures::Stream.tuple_windows()

你知道提供与 s 类似功能的 crateItertoolsStream?如果没有,您如何建议这样做?

0 投票
2 回答
42 浏览

rust - 使用自定义 `futures::Stream` 链接适配器会破坏 trait bound

我需要实现一个Stream在滑动窗口中产生项目的自定义(即 [1, 2, 3] => [(1, 2), (2, 3)])。所以我实现并给了它一个名为.tuple_windows(). 允许以下代码

当最终类型没有实现特征时,我遇到了一个奇怪的情况Stream

代码(操场):

编译器错误也没有帮助,因为它只告诉我Stream没有为新创建的类型实现:

我在这里想念什么?

0 投票
1 回答
51 浏览

rust - 从 rust 中的异步闭包调用存储的闭包

我有一个闭包,它可以改变在它之外设计的变量。我将如何调用这个从异步范围内修改状态的闭包?

我有以下代码(摘要,以显示问题):

产生以下内容:

现在,我相信我明白为什么会发生错误。我只是想不出办法解决这个问题。

对于上下文:

  1. 我有一个 websocket 客户端,我正在从流中读取
  2. 每次我从流中接收数据时,我都会对其进行转换
  3. 然后,我需要使用转换后的数据调用闭包,以便在其他地方使用——本质上就像 JavaScript 中的 EventEmitter。

我会以错误的方式解决这个问题吗?我是一名 JavaScript 开发人员,所以我不得不在这里改变我的思维方式。

0 投票
1 回答
56 浏览

rust - 限制 join_all!() 中的并发期货数量

如何让 Rust 执行所有给定的期货(如join_all!)限制一次执行 10 个期货?

我需要从大量服务器下载文件,但同时查询不超过 10 个服务器(以准确测量它们的超时:如果我一次查询太多服务器,它们会超时,即使服务器本身速度很快)。

0 投票
1 回答
51 浏览

rust - 跨线程移动任务时 Rust Async Executor 内存排序保证?

这是关于 Rust 异步生态系统内的内存排序保证的一个相当基本的问题。但是,我似乎在任何地方都找不到明确的答案。

C++ 内存排序从基于线程的角度指定内存排序:

发布-获取排序

如果线程 A 中的原子存储标记为 memory_order_release,并且线程 B 中来自同一变量的原子加载标记为 memory_order_acquire,则从线程的角度来看,在原子存储之前发生的所有内存写入(非原子和宽松原子) A,在线程 B 中成为可见的副作用。也就是说,一旦原子加载完成,线程 B 保证可以看到线程 A 写入内存的所有内容。

各种 Rust 异步执行器支持跨线程移动任务.await。一个自然的场景是:

  1. Relaxed任务 A 位于线程 1 并在变量 处执行存储x
  2. 任务 A.await命中
  3. 任务 A 被移动到线程 2 并被唤醒。Release然后在变量处执行存储y
  4. 任务 B 位于线程 3 并在变量处执行Acquire加载y

问题是:线程 1 的存储是否保证在加载Relaxed后在任务 B 中可见?Acquire例如,如果线程 3 的任务 B之后Relaxed在变量处执行了负载x,是否可以保证任务 A 的副作用是可见的?

这应该取决于每个异步执行器的任务调度程序中同步机制的实现。任何熟悉它们的人都会受到赞赏。

0 投票
0 回答
62 浏览

asynchronous - Rust 习惯用法相当于在 `async` 块中修改结构的字段

我正在使用结构来跟踪状态并Future为其实现特征。

借用检查器将没有它,因为async块可变地借用self并且编译器不允许self第二次可变地借用。这是期望的行为。

我的问题是:在一个块中修改一个结构上的一个字段async并将这个计算的结果保存到这个结构上的另一个字段的 Rust 习惯用法是什么?

添加一些上下文:stream由其他两个流构建。一旦聚合了足够多的元素,我们希望能够保存来自streamin的连续元素以供访问。storage我希望这样的功能在板条箱中的某个地方,但是futures方法futures::stream::StreamExt并不完全适合我的用例。bufferedbuffer_unordered

0 投票
0 回答
33 浏览

http - Rust Hyper 和 Futures

我开始在 Rust 上使用 Hyper。我写了一个简单的代码(基于Hyper cannot find Server module),它似乎就在那里,但遇到了一些意想不到的问题。这是最小化的代码片段,应该很容易重现。目前有 5 个错误,标有 ISSUE 注释:

问题是:

  1. 在模块中找不到函数运行hyper::rt
  2. 相关类型 Error 和 Item not foundfutures::Future
  3. 类型注释需要future::ok
  4. 没有为 struct Server 找到名为 map_err 的方法
  5. 特质界for<'a> [closure@src\main.rs:58:32: 64:6]: Service<&'a AddrStream> is not satisfied

我的货物.toml:

如何编译我的示例?任何提示将不胜感激!