gpt4 book ai didi

dart - Dart 中的原始 channel ?

转载 作者:行者123 更新时间:2023-12-03 04:05:33 24 4
gpt4 key购买 nike

例如,在Go中,Dart中是否有channel原语?我找到的最接近的是StreamIterator

用例是允许消费者一个接一个地异步处理值。此外,如果没有值(value),则应等待。

最佳答案

您可以使用流来执行此操作

import 'dart:async' show Stream, StreamController;

main() {
StreamController<int> sc = new StreamController<int>();

sc.stream.listen((e) => print(e));

for(int i = 0; i < 10; i++) {
sc.add(i);
}
}

DartPad中尝试

也可以看看
  • https://www.dartlang.org/docs/tutorials/streams/
  • https://www.dartlang.org/articles/creating-streams/

  • 您不能在Dart中“仅等待”,尤其是在浏览器中。

    Dart中还提供了 async*生成器函数来创建流。例如参见 Async/Await feature in Dart 1.8

    “天真”的翻译形式 await for(var event in someStream)
    import 'dart:async';

    main() {
    StreamController<int> sc = new StreamController<int>();

    startProcessing(sc.stream);

    for(int i = 0; i < 10; i++) {
    sc.add(i);
    }
    }

    Future startProcessing(Stream stream) async {
    StreamSubscription subscr;
    subscr = stream.listen((value) {
    subscr.pause();
    new Future.delayed(new Duration(milliseconds: 500)).then((_) {
    print('Processed $value');
    subscr.resume();
    });
    });
    //await for(int value in stream) {
    // await new Future.delayed(new Duration(milliseconds: 500)).then((_) {
    // print('Processed $value');
    // });
    //}
    }

    实际实现采用不同的方法

    The way the await-for loop is implemented uses a one-event buffer (to avoid repeatedly pausing and resuming).



    参见 https://github.com/dart-lang/sdk/issues/24956#issuecomment-157328619

    关于dart - Dart 中的原始 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718133/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com