Dart- 비동기프로그래밍(stream)

yezee·2024년 7월 9일
0

Flutter

목록 보기
13/15
post-thumbnail

Future 키워드를 쓰면 async로 프로그래밍을 할 수 있다
Future는 실행을 하면 완료까지 하나의 반환값을 받는 반면, stream은 실행에서 완료 순간까지 여러개의 반환값을 받을 수 있다.

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
  

  
 
}

steam 함수

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);
}
}
profile
아 그거 뭐였지?

0개의 댓글