Dart 4 비동기 프로그래밍
2022. 10. 3. 20:46ㆍ프로그래밍 언어/Flutter
Dart 언어는 Asychoronous Programming 이다.
Future 지연 함수
void main() {
// Future - 미래
// 미래에 받아올 값
addNumbers(1,1);
}
void addNumbers(int number1 , int number2){
print('계산 시작: $number1 + $number2');
// 2개의 파라미터
// delayed -지연되다.
// 1번 파라미터 - 지연할 시간 (얼마나 지연할건지) Duration
// 2번 파라미터 - 지연시간이 지난 후 실행할 함수
Future.delayed(Duration(seconds: 2),(){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료');
}
메소드에 await 쓰는법
함수에 async 키워드를 써줘야 await 를 쓸 수있다.
await : 순서대로 실행 하도록 만드는 키워드
void main() {
addNumbers(1,1);
addNumbers(2,2);
}
// await 현재 코드가 끝나기 전에 다음코드를 실행하지마세요.
// await 는 Future 를 리턴해주는 함수만 가능
void addNumbers(int number1 , int number2) async {
print('계산 시작: $number1 + $number2');
// 2개의 파라미터
// delayed -지연되다.
// 1번 파라미터 - 지연할 시간 (얼마나 지연할건지) Duration
// 2번 파라미터 - 지연시간이 지난 후 실행할 함수
await Future.delayed(Duration(seconds: 2),(){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료');
}
함수에 await 쓰는법
void main() async{
await addNumbers(1,1);
await addNumbers(2,2);
}
// 함수 자체를 await 쓰려면,
// 1.리턴값을 Future 로 바꿔줘야한다.
// 2. main 에 async 키워드
// 3. 함수에 await 키워드
Future <void> addNumbers(int number1 , int number2) async {
print('계산 시작: $number1 + $number2');
// 2개의 파라미터
// delayed -지연되다.
// 1번 파라미터 - 지연할 시간 (얼마나 지연할건지) Duration
// 2번 파라미터 - 지연시간이 지난 후 실행할 함수
await Future.delayed(Duration(seconds: 2),(){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료');
}
Future로 리턴하기
void main() async{
// Future - 미래
// 미래에 받아올 값
Future<String> name =Future.value('코드팩토리');
Future<int> number = Future.value(1);
Future<bool> isTrue = Future.value(true);
final result1 = await addNumbers(1,1);
final result2 = await addNumbers(2,2);
print('result1 : $result1');
print('result1 : $result1');
print('result1 + result2 = ${result1 + result2}');
}
Future <int> addNumbers(int number1 , int number2) async {
print('계산 시작: $number1 + $number2');
await Future.delayed(Duration(seconds: 2),(){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료');
// 자동으로 Future 에 말아서 리턴해준다.
return number1+ number2;
}
import 'dart:async';
void main() {
final controller = StreamController();
final stream = controller.stream.asBroadcastStream();
final streamListener1 = stream.where((val) => val %2 ==0).listen((val) {
print('Listener 1 : $val');
});
final streamListener2 = stream.where((val) => val %2 ==1).listen((val) {
print('Listener 2 : $val');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
controller.sink.add(5);
}
import 'dart:async';
void main() {
calculate(2).listen((val){
print('calculate(2): $val');
});
calculate(4).listen((val){
print('calculate(4): $val');
});
}
Stream<int> calculate(int number) async* {
for(int i=0; i< 5 ; i++){
yield i* number;
await Future.delayed(Duration(seconds: 1));
}
}
각 stream 은 동시에 진행되는 걸로보아 비동기로 작동하는걸 볼수있음.
한 스트림이 끝나고 다음 스트림으로 넘어가는법 : yield*
import 'dart:async';
void main() {
playAllStream().listen((val){
print(val);
});
}
//yield* 은 모든값을 가져와야 다음으로 넘어감.
Stream<int> playAllStream() async*{
yield* calculate(1);
yield* calculate(1000);
}
Stream<int> calculate(int number) async* {
for(int i=0; i< 5 ; i++){
yield i* number;
await Future.delayed(Duration(seconds: 1));
}
}
'프로그래밍 언어 > Flutter' 카테고리의 다른 글
[Flutter] Row and Column (0) | 2022.10.13 |
---|---|
INSTALL_FAILED_INSUFFICIENT_STORAGE 해결법 (0) | 2022.10.10 |
Dart 3 함수형 프로그래밍 (0) | 2022.10.03 |
Dart 2 객체지향 프로그래밍 (0) | 2022.10.02 |
Dart 언어 기본기 (0) | 2022.10.02 |