我发现在以下代码示例中,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 *足够有效,我想它可以代替递归函数来避免堆栈大小限制。
听起来像是以下历史悠久的期刊。我建议您阅读该主题,因为我认为我无法在此处做简历,这会使它显得公道:https://github.com/dart-lang/sdk/issues/29189
我想补充一点,您的示例也可以使用sync *编写,这要快得多,但当然不是异步的: