dart语言中的慢速异步递归

问题描述 投票:0回答:1

我发现在以下代码示例中,dart语言的异步递归似乎非常慢,我想知道为什么。

import "dart:async";

Stream<int> rec(int z) async* {
  yield z;
  if (z > 0) yield* rec(z - 1);
}

void main() {
  Stream<int> stream = rec(10000);
  stream.listen((int x) {
    if (x % 1000 == 0) print(x);
  });
}

我正在dart虚拟机上进行测试,因此我不敢相信会涉及到计时器,因为它很可能位于浏览器的js虚拟机中。

如果yield *足够有效,我想它可以代替递归函数来避免堆栈大小限制。

asynchronous dart yield
1个回答
0
投票

听起来像是以下历史悠久的期刊。我建议您阅读该主题,因为我认为我无法在此处做简历,这会使它显得公道:https://github.com/dart-lang/sdk/issues/29189

我想补充一点,您的示例也可以使用sync *编写,这要快得多,但当然不是异步的:

© www.soinside.com 2019 - 2024. All rights reserved.