Dart中是否存在channel
原语,例如Go中有?我找到的最接近的是StreamIterator。
用例是允许消费者逐个异步处理值。此外,如果没有价值,它应该等待。
答案 0 :(得分:1)
您可以使用流
执行此操作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);
}
}
中试用
另见
你不能等待&#34;在Dart中,尤其是在浏览器中。
Dart中还有async*
个生成器函数可用于创建流。请参阅示例Async/Await feature in Dart 1.8
A&#34;天真&#34;翻译表格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');
// });
//}
}
实际实施采用不同的方法
实现await-for循环的方式使用单事件缓冲区(以避免重复暂停和恢复)。
请参阅https://github.com/dart-lang/sdk/issues/24956#issuecomment-157328619