728x90
void main() async{
//Future - 미래
// 미래에 받아올 값
Future<String> name = Future.value('하하호호');
Future<int> number = Future.value(1);
Future<bool> isTrue = Future.value(true);
await addNumber(1, 1);
await addNumber(2, 2);
}
Future<void> addNumber(int number1, int number2) async {
print("계산 시작 : $number1 + $number2");
// 서버 시뮬레이션
await Future.delayed(Duration(seconds: 2), (){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료');
}
Future
- Future는 다트에서 비동기 작업을 나타내는 클래스입니다. 이것은 어떤 값이나 오류를 '미래에'반환할 수 있는 객체를 나타냅니다. Future는 한 번 결정되면 변경할 수 없습니다.
- Future.value 생성자를 사용하여 즉시 결정된 미래 값을 생성하고 있습니다.
Duration
- Duration 클래스는 시간 간격을 나타냅니다. 여러 시간 단위(일, 시간, 분, 초, 밀리촌, 마이크로초)를 사용하여 간격을 나타낼 수 있습니다.
delayed
- Future.delayed는 지정된 지연이 경과한 후에 값을 계산하는 미래를 생성합니다.
seconds
- seconds는 Duration 생성자에서 사용되는 명명된 매개변수 중 하나입니다.
async
- async 키워드는 함수가 비동기로 실행될 수 있음을 나타냅니다. async가 표기된 함수는 항상 Future를 반환합니다. 심지어 반환 유형이 void인 경우에도, 그것은 실제로 Future<void>를 반환합니다.
await
- await 키워드는 async 함수 내에서 사용되며, Future가 완료될 때까지 기다립니다. 이렇게 하면 Future의 결과를 마치 동기 코드처럼 읽을 수 있게 됩니다.
- await 표현식 자체는 Future를 반환하므로, 일반적으로 await 키워드는 async 함수 내에서만 사용됩니다.
import 'dart:async';
void main(){
final controller = StreamController();
final stream = controller.stream;
final streamListener1 = stream.listen((val){
print('Listener 1 : $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(){
final controller = StreamController();
final stream = controller.stream.asBroadcastStream();
final streamListener1 = stream.listen((val){
print('Listener 1 : $val');
});
final stemListener2 = stream.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(){
final controller = StreamController();
final stream = controller.stream.asBroadcastStream();
final streamListener1 = stream.where((val) => val % 2 == 0).listen((val){
print('Listener 1 : $val');
});
final stemListener2 = 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(1) : $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));
}
}
import 'dart:async';
void main(){
playAllStream().listen((val){
print(val);
});
}
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));
}
}
// stream은 더 좋은 라이브러리가 있으니 너무 걱정하지 않아도 됩니다.
728x90
'Flutter(플러터)' 카테고리의 다른 글
| Dart #3 함수형 프로그래밍(Functional Programming) (1) | 2023.09.18 |
|---|---|
| Dart #2 객체지향 프로그래밍(Object Oriented Programming) (0) | 2023.09.18 |
| Dart #1 기본기 (0) | 2023.09.17 |