Я использую потоки Dart для асинхронных событий. У меня есть два потока, и я хочу знать, когда оба потока будут завершены (или закрыты). Я хотел бы сделать это с фьючерсами. Как это сделать?
Как я могу узнать, когда два потока выполнены?
Ответы (1)
StreamSubscription
может вернуть Future с asFuture
. Когда поток закрывается, будущее подписки завершается.
Используйте Future.wait
, чтобы дождаться завершения фьючерсов обоих потоков.
Вот пример:
import 'dart:async';
Future listenOnTwoStreams(Stream s1, Stream s2) {
StreamSubscription sub1 = s1.listen((e) => print(e));
StreamSubscription sub2 = s2.listen((e) => print(e));
Future f1 = sub1.asFuture();
Future f2 = sub2.asFuture();
return Future.wait([f1, f2]).then((e) => print("all done!"));
}
void main() {
StreamController controller1 = StreamController();
StreamController controller2 = StreamController();
Stream s1 = controller1.stream;
Stream s2 = controller2.stream;
listenOnTwoStreams(s1, s2);
Timer.run(() {
controller1.add("1");
controller2.add("2");
controller1.close();
controller2.close();
});
}
person
Seth Ladd
schedule
11.10.2013
Да, это способ сделать это.
- person Justin Fagnani; 11.10.2013
@FlorianLoitsch, можете ли вы отредактировать ответ или создать новый ответ с правильной обработкой ошибок?
- person Seth Ladd; 24.10.2013