sync
void main() {
addNumbers(1, 1);
addNumbers(2, 2);
}
// 1 + 1 = 2
// 2 + 2 = 4
void addNumbers(int num1, int num2) {
print('계산중 : $num1 + $num2');
print('계산 완료 : ${num1 + num2}');
}
계산중 : 1 + 1 계산 완료 : 2 계산중 : 2 + 2 계산 완료 : 4
async
CPU가 기다리는 동안, 쉬지 않고 다른 작업을 할 수 있도록 구성
void main() {
// Future - 미래
// 미래에 받아올 값
Future<String> name = Future.value('soobin');
Future<int> num = Future.value(1);
Future<bool> isTrue = Future.value(true);
print('함수 시작');
addNumbers(1, 1);
Future.delayed(Duration(seconds: 2), (){
print('Delay 끝');
});
}
void addNumbers(int num1, int num2) {
print('계산 시작 : $num1 + $num2');
Future.delayed(Duration(seconds: 2), (){
print('게산 완료 : $num1 + $num2 = ${num1 + num2}');
});
print('함수 완료');
}
함수 시작 계산 시작 : 1 + 1 함수 완료 게산 완료 : 1 + 1 = 2 Delay 끝
void main() {
// Future - 미래
// 미래에 받아올 값
Future<String> name = Future.value('soobin');
Future<int> num = Future.value(1);
Future<bool> isTrue = Future.value(true);
print('함수 시작');
addNumbers(1, 1);
addNumbers(2, 2);
Future.delayed(Duration(seconds: 2), (){
print('Delay 끝');
});
}
void addNumbers(int num1, int num2) {
print('계산 시작 : $num1 + $num2');
Future.delayed(Duration(seconds: 2), (){
print('게산 완료 : $num1 + $num2 = ${num1 + num2}');
});
print('함수 완료');
}
함수 시작
계산 시작 : 1 + 1
함수 완료
계산 시작 : 2 + 2
함수 완료
게산 완료 : 1 + 1 = 2
게산 완료 : 2 + 2 = 4
Delay 끝
await
void main() {
// Future - 미래
// 미래에 받아올 값
Future<String> name = Future.value('soobin');
Future<int> num = Future.value(1);
Future<bool> isTrue = Future.value(true);
print('함수 시작');
addNumbers(1, 1);
addNumbers(2, 2);
Future.delayed(Duration(seconds: 2), () {
print('Delay 끝');
});
}
void addNumbers(int num1, int num2) async {
print('계산 시작 : $num1 + $num2');
await Future.delayed(Duration(seconds: 2), () {
print('게산 완료 : $num1 + $num2 = ${num1 + num2}');
});
print('함수 완료');
}
함수 시작 계산 시작 : 1 + 1 계산 시작 : 2 + 2 게산 완료 : 1 + 1 = 2 함수 완료 게산 완료 : 2 + 2 = 4 함수 완료 Delay 끝
main의 async
void main() async {
// Future - 미래
// 미래에 받아올 값
Future<String> name = Future.value('soobin');
Future<int> num = Future.value(1);
Future<bool> isTrue = Future.value(true);
print('함수 시작');
await addNumbers(1, 1);
await addNumbers(2, 2);
Future.delayed(Duration(seconds: 2), () {
print('Delay 끝');
});
}
Future<void> addNumbers(int num1, int num2) async {
print('계산 시작 : $num1 + $num2');
await Future.delayed(Duration(seconds: 2), () {
print('게산 완료 : $num1 + $num2 = ${num1 + num2}');
});
print('함수 완료');
}
함수 시작 계산 시작 : 1 + 1 게산 완료 : 1 + 1 = 2 함수 완료 계산 시작 : 2 + 2 게산 완료 : 2 + 2 = 4 함수 완료
Future를 통한 return 값 받기
void main() async {
// Future - 미래
// 미래에 받아올 값
Future<String> name = Future.value('soobin');
Future<int> num = Future.value(1);
Future<bool> isTrue = Future.value(true);
print('함수 시작');
final result1 = await addNumbers(1, 1);
final result2 = await addNumbers(2, 2);
Future.delayed(Duration(seconds: 2), () {
print('Delay 끝');
});
}
Future<int> addNumbers(int num1, int num2) async {
print('계산 시작 : $num1 + $num2');
await Future.delayed(Duration(seconds: 2), () {
print('게산 완료 : $num1 + $num2 = ${num1 + num2}');
});
print('함수 완료');
return num1 + num2;
}
stream
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);
}
strem 여러개
import 'dart:async';
void main() {
final controller = StreamController();
final stream = controller.stream.asBroadcastStream();
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);
final streamListener2 = stream.listen((val){
print('Listener 2 : $val');
});
}
Listener 1 : 1 Listener 2 : 1 Listener 1 : 2 Listener 2 : 2 Listener 1 : 3 Listener 2 : 3 Listener 1 : 4 Listener 2 : 4 Listener 1 : 5 Listener 2 : 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');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
controller.sink.add(5);
final streamListener2 = stream.where((val) => val % 2 == 1).listen((val){
print('Listener 2 : $val');
});
}
Listener 2 : 1 Listener 1 : 2 Listener 2 : 3 Listener 1 : 4 Listener 2 : 5
stream, async
import 'dart:async';
void main() {
calculate(1).listen((val){
print('calculate(1) : $val');
});
}
Stream<int> calculate(int number) async* {
for (int i = 0; i < 5; i++) {
yield i * number;
}
}
calculate(1) : 0 calculate(1) : 1 calculate(1) : 2 calculate(1) : 3 calculate(1) : 4
import 'dart:async';
void main() {
calculate(2).listen((val){
print('calculate(1) : $val');
});
}
Stream<int> calculate(int number) async* {
for (int i = 0; i < 5; i++) {
yield i * number;
}
}
calculate(1) : 0 calculate(1) : 2 calculate(1) : 4 calculate(1) : 6 calculate(1) : 8
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));
}
}
calculate(1) : 0 calculate(4) : 0 calculate(1) : 2 calculate(4) : 4 calculate(1) : 4 calculate(4) : 8 calculate(1) : 6 calculate(4) : 12 calculate(1) : 8 calculate(4) : 16
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));
}
}
0 1 2 3 4 0 1000 2000 3000 4000