-
[개발일지] Dart 입문 4: Asynchronous ProgrammingStudy/Development 2022. 8. 21. 21:29
<인프런 코드팩토리 강의 수강일지>
1. Future
void main() { // Future: 미래 // 미래에 받아올 값 Future<String> name = Future.value('코팩'); Future<int> number = Future.value(1); Future<bool> isTrue = Future.value(true); print('함수 시작'); // 2개의 파라미터 // delayed - 지연되다 // 1번 파라미터 - 지연할 기간 (얼마나 지연할 건지) Duration // 2번 파라미터 - 지연 시간이 지난 후 실행할 함수 Future.delayed(Duration(seconds: 3), () { print('Delay 끝'); // 함수 시작 후 3초 뒤에 실행된다. }); }
void main() { // Future: 미래 // 미래에 받아올 값 Future<String> name = Future.value('코팩'); Future<int> number = Future.value(1); Future<bool> isTrue = Future.value(true); addNumbers(1,1); addNumbers(2,2); } void addNumbers(int num1, int num2) { print('계산 시작: $num1 + $num2'); // 서버 시뮬레이션 Future.delayed(Duration(seconds: 2), () { print('계산 완료: $num1 + $num2 '); }); print('함수완료'); } //계산 시작: 1 + 1 //함수완료 -> 기다리는 동안 다음 명령 시작 //계산 시작: 2 + 2 -> 기다리는 동안 다음 명령 시작 //함수완료 -> 기다리는 동안 다음 명령 시작 //계산 완료: 1 + 1 -> 2초 뒤 완료 //계산 완료: 2 + 2 -> 2초 뒤 완료
2. async - await
void main() { addNumbers(1,1); addNumbers(2,2); } void addNumbers(int num1, int num2) async { print('계산 시작: $num1 + $num2'); // 서버 시뮬레이션 await Future.delayed(Duration(seconds: 2), () { print('계산 완료: $num1 + $num2 = ${num1 + num2}'); }); // await 사용하여 시간 만큼 기다릴 수 있고, 다른 작업을 실행할 수 있다. print('함수완료'); } // 계산 시작: 1 + 1 // 계산 시작: 2 + 2 // 계산 완료: 1 + 1 = 2 // 함수완료 // 계산 완료: 2 + 2 = 4 // 함수완료
void main() async { final result1 = await addNumbers(1, 1); final result2 = await addNumbers(2, 2); print('result1: $result1'); // 미래의 값 print('result2: $result2'); print('result1 + result2 = ${result1 + result2}'); } Future<int> addNumbers(int num1, int num2) async { print('계산 시작: $num1 + $num2'); // 서버 시뮬레이션 await Future.delayed(Duration(seconds: 2), () { print('계산 완료: $num1 + $num2 = ${num1 + num2}'); }); // await 사용하여 시간 만큼 기다릴 수 있고, 다른 작업을 실행할 수 있다. print('함수완료'); return num1 + num2; // return 하여 받아올 수 있음. }
3. Stream
import 'dart:async'; // stream 사용 시 임포트 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 != 0).listen((val) { print('Listener 2 : $val'); // 홀수만 전달 }); controller.sink.add(1); // listener에 값을 전달 controller.sink.add(2); controller.sink.add(3); controller.sink.add(4); controller.sink.add(5); } // Listener 2 : 1 // Listener 1 : 2 // Listener 2 : 3 // Listener 1 : 4 // Listener 2 : 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)); // 비동기로 동시에 출력 } } // calculate(2): 0 // calculate(4): 0 // calculate(2): 2 // calculate(4): 4 // calculate(2): 4 // calculate(4): 8 // calculate(2): 6 // calculate(4): 12 // calculate(2): 8 // calculate(4): 16
//yield 마무리 후 다음 yield import 'dart:async'; void main() { playAllStream().listen((val) { print(val); }); } Stream<int> playAllStream() async* { yield* calculate(1); //yield*을 붙이면 함수 완료된 후 다음작업 실행 yield* calculate(1000); // await와 유사 } Stream<int> calculate(int number) async* { for (int i = 0; i < 5; i++) { yield i * number; await Future.delayed(Duration(seconds: 1)); // 비동기로 동시에 출력 } } // 0 // 1 // 2 // 3 // 4 // 0 // 1000 // 2000 // 3000 // 4000
반응형'Study > Development' 카테고리의 다른 글
[개발일지] flutter 앱개발 2주차 (0) 2022.09.12 [개발일지] flutter 앱개발 1주차 (0) 2022.08.30 [개발일지] Dart 입문 3: Functional Programming (0) 2022.08.21 [개발일지] Dart 입문 2: Object Oriented Programming (0) 2022.08.18 [개발일지] Dart 입문 1: 언어 기본 (0) 2022.08.17