Future
키워드를 쓰면 async
로 프로그래밍을 할 수 있다
Future는 실행을 하면 완료까지 하나의 반환값을 받는 반면, stream은 실행에서 완료 순간까지 여러개의 반환값을 받을 수 있다.
사용하기 위해서는 패키지를 사용해야한다
import 'dart:async';
mport 'dart:async';
void main(){
final controller= StreamController();
final stream= controller.stream;
final streamListener1= stream.listen((val){
print('Listener1:$val');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
//Listener1:1
//Listener1:2
//Listener1:3
}
여러번 리스닝을 하기 위해서는 asBroadcastStream()
을 사용
mport 'dart:async';
void main(){
final controller= StreamController();
final stream= controller.stream.asBroadcastStream();
final streamListener1= stream.listen((val){
print('Listener1:$val');
});
final streamListener2= stream.listen((val){
print('Listener2:$val');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
//Listener1:1
//Listener2:1
//Listener1:2
//Listener2:2
//Listener1:3
//Listener2:3
}
import 'dart:async';
void main(){
calulate(1).listen((){
print('calcultate: $val');
//calcutate(1):0
//calcutate(1):1
//calcutate(1):2
}
playAllStream().listen((val){
print(val);
//0
//1
//2
//0
//1000
//2000
})
);
}
Stream<int> calculate(int number)async*{
for(int i=0 i<3 i++){
yield i*number;
//비동기사용방법
await Future.delayed(Duration(seconds:1));
}
//stream에서 await과 비슷한 동작을 하기위해선 yield를 사용
Stream<int> playAllStream()async*{
yield*calculate(1);
yield*calculate(1000);
}
}