问题标签 [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 投票
1 回答
485 浏览

rust - impl Stream 无法取消固定

我正在尝试使用crates_io_api. 我试图从流中获取数据,但我无法让它工作。

AsyncClient::all_crates返回一个impl Stream. 我如何从中获取数据?如果您提供代码会很有帮助。

我检查了异步书,但它没有用。谢谢你。

这是我当前的代码。

0 投票
1 回答
128 浏览

rust - 如何在 Rust 中创建不同 Future 特征之间的互操作性?

我正在尝试使用该binance_async库,tokio并向futuresBinance 发出并发订单。(请参阅本问题末尾的注释。)我正在使用
的函数返回一个类型。我面临以下问题,在这两个示例中进行了说明:binance_asyncbinance_async::error::Result<impl futures::future::Future<_, _>>

  1. 假设我正在尝试这样做:

这太奇怪了。首先,我在任何地方都找不到futures::Future- only futures::future::Future,它fut.unwrap()实现了。有什么帮助吗?

  1. 好吧,忘记 Tokio,让我们试试这个:

同样的错误,同样的问题。

笔记:

  1. 我可能是过度进口。如果导入所有这些库看起来有点矫枉过正,甚至是问题的根源,请告诉我!
  2. 我知道这binance_async是一个维护不足的图书馆。我很可能会完全放弃这种方法,binance转而使用 crate。我只是对这个错误很好奇。
  3. 我的主管说这可能与属性宏有关,但我们俩都只有几个月的 Rust 经验并试图快速完成这项工作,我们无法深入挖掘。

非常感谢 :)

0 投票
0 回答
112 浏览

rust - Rust Futures 的最佳嵌套并行化方法

不确定这是否是一个好问题,但我希望除了我的主要问题之外,如果嵌套并行化是否不好,答案也可以涵盖。太感谢了!

假设我有任务 a、b、c 和 d。这些任务每个都有其单独的子任务,a1、a2 等等。

有时,a1 可能还有一堆子任务要完成。任务嵌套在 a、b、c 和 d 中,因为它们依赖于作为一个整体一起处理,因此没有办法将它们解耦并创建任务 e、f 和 g(等等..)。

我目前正在利用 Futures 和 Threadpool以并发、并行的方式处理这些任务(例如 a、b.. 并行运行,a1、a2 并行运行)。

然而,我受到了欢迎

上面失败的代码是

所以问题是:

  1. 在这种情况下嵌套并行化是否正确?(如果不是,我该怎么办?如果是,我该怎么办?)
  2. 如何确保安全地创建线程池,以便在资源不足时不会失败展开?
  3. 如果 (2) 是错误的做法,我应该如何实现我的代码?
0 投票
1 回答
145 浏览

rust - 类型相同时,Rust 中的“一种类型比另一种更通用”错误

我有以下代码

此外,您可以在Rust Playground上在线运行它。

出现以下错误:

现在,这真的很奇怪,因为它清楚地表明它正在得到它所期望的。我不明白哪种类型比哪种更通用。我对生命周期的了解不足以调试此代码。有人可以对此有更多的了解吗?

0 投票
1 回答
68 浏览

rust - 转换流, _>> 到流>

假设我有一个 Result<Vec> 流:

我怎样才能成为s具有返回类型的函数的返回值impl Stream<Item = Result<(), _>

0 投票
1 回答
54 浏览

rust - 为什么实施 ArcWake 避免编写样板文件?

在构建异步期货时,通常在唤醒器中实现ArcWake特征。我知道这样做是为了避免编写样板文件、创建 vtables 和编写不安全的代码(根据tokio 教程)。

现在,(这感觉像是一个愚蠢的问题)我不明白的是如何实现一个特征避免编写其他代码?当我检查trait 的来源时,它几乎不包含任何内容:只有一个需要实现以实现该 trait 的小函数的声明以及另一个调用该 trait 的函数的实例化。那么,我们避免写作的所有这些东西是从哪里来的呢?样板文件、vtables、不安全代码和所有这些在哪里?仅仅因为我们在唤醒器上实现了一个特征,它是如何被执行的?

0 投票
1 回答
253 浏览

rust - 取消固定 BoxStream 以使用 Tonic gRPC 流发送

我是 Rust 的新手,正在编写一个简单的应用程序,该应用程序将使用Tonic通过 gRPC 流式传输一些值。这些值最初是从外部库作为BoxStream ( Pin<Box<Stream>>) 获取的,并且 tonic 的 API 需要实现的东西Stream(当然 Pin 不需要)。

Tonic 的流式传输示例使用ReceiverStream将 mpsc 通道转换为流,并分离一个线程以将值推送到其中。这将需要一个流的生命周期,'static这对于我的实际实现来说不是一个选项,因为我的流的生命周期与返回它的类相关联。

提供实现 Stream 的东西的最佳方式是什么,我可以从我Pin<Box<Stream>>

src/main.rs(这不会编译,因为 BoxStream<'static, Entry> 没有实现 IntoStreamingRequest)

货运.toml

提供编译错误:

0 投票
1 回答
85 浏览

asynchronous - 如何同时抓取未知端的分页网页?

我正在尝试使用 tokio 异步运行时在 Rust 中编写一个网络爬虫。我想异步获取/处理多个页面,但我也希望爬虫在到达末尾时停止(换句话说,如果没有什么可爬的)。到目前为止,我已经使用futures::future::try_join_all从我提供为Futures 的异步函数中获取集体结果,但这显然需要程序事先知道要抓取的总页数。例如:

锈游乐场

在这个简单的示例中,我必须知道要通过 ( 1..=3) 的总页数,然后才能实际获取它们。我想要的是,不提供任何范围并且有条件停止整个过程。(例如,如果 HTML 结果包含“未找到”)

我查看了futures::executor::block_on但我不确定它是否可以用于这项任务。

0 投票
2 回答
154 浏览

mongodb - try_join 使 mongodb 事务同时发送

我是 Rust 新手,我正在使用默认的 MongoDB 驱动程序 https://docs.rs/mongodb/2.0.0/mongodb/

我记得在使用 Node.js 编码时,有可能使用一些 Promise.all() 发送事务,以便同时执行所有事务以进行优化,如果没有错误,则提交到交易。(此处为 Node.js 示例:https ://medium.com/@alkor_shikyaro/transactions-and-promises-in-node-js-ca5a3aeb6b74 )

我现在正在尝试使用 try_join 在 Rust 中实现相同的逻辑!但我一直反对这个问题:

错误:一次不能多次借用sessionmutable;标签:第一个可变借用发生在这里

有什么方法可以同步发送事务函数,以免在独立突变上浪费任何时间?有没有人有任何想法?提前致谢!

0 投票
0 回答
154 浏览

javascript - 悬而未决的承诺已取消

我试图让 Cloudflare 的工作人员跟踪一些 ERC20 代币的流通,作为学习 web3 和 wasm 的练习。认为它可能很简单,但到目前为止,大约 90% 的时间都在尝试解决这个难以捉摸的错误

我在网上寻找更多信息,但似乎我的错误来自不同的类型(?)。

这是一个简单的代码片段来重现。

这是 worker/workers.js 文件

货运.toml

wrangler dev会很好地编译它,但是http://127.0.0.1:8787会导致Error 1101