synchronous
- 하나의 함수가 계산완료되기 전에 다음 계산이 진행되지 않음
void main() {
addNumbers(1, 1);
addNumbers(2, 2);
}
void addNumbers(int number1, int number2) {
print('계산중: $number1 + $number2');
print('계산 완료: $number1 + $number2');
}
// result
계산중: 1 + 1
계산 완료: 1 + 1
계산중: 2 + 2
계산 완료: 2 + 2
Asynchronous : Future 사용
void main() {
// Future
// 미래에 받아올 값
Future<String> name = Future.value('코드팩토리'); // 미래에 받아올 String 값
Future<int> number = Future.value(1);
Future<bool> isTrue = Future.value(true);
print('함수 시작');
// 2개의 파라미터
// delayed - 지연되다
// 1번 파라미터 - 지연할 기간 (얼마나 지연할건지) Duration
// 2번 파라미터 - 지연 시간이 지난 후 실행할 "함수"
Future.delayed(Duration(seconds: 2), (){
print('Delay 끝');
});
}
// 실행결과
함수 시작
(2초 후)
Delay 끝
void main() {
addNumbers(1, 1);
}
void addNumbers(int number1, int number2) {
print('계산 시작 : $number1 + $number2');
// 서버 시뮬레이션
Future.delayed(Duration(seconds: 2), (){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료 : $number1 + $number2');
}
// 실행 결과
계산 시작 : 1 + 1
함수 완료
계산 완료: 1 + 1 = 2
void main() {
addNumbers(1, 1);
addNumbers(2, 2);
}
// 실행 결과
계산 시작 : 1 + 1
함수 완료 : 1 + 1
계산 시작 : 2 + 2
함수 완료 : 2 + 2
계산 완료: 1 + 1 = 2
계산 완료: 2 + 2 = 4
async - await
void main() {
addNumbers(1, 1);
}
void addNumbers(int number1, int number2) async {
print('계산 시작 : $number1 + $number2');
// 서버 시뮬레이션
await Future.delayed(Duration(seconds: 2), (){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료 : $number1 + $number2');
}
// 실행결과
계산 시작 : 1 + 1
계산 완료: 1 + 1 = 2
함수 완료 : 1 + 1
void main() {
addNumbers(1, 1);
addNumbers(2, 2);
}
// 실행결과
계산 시작 : 1 + 1 // 1번함수 - await 때문에 2초 기다리는 중
계산 시작 : 2 + 2 // 2번함수 시작 (1번 함수가 끝나지 않았지만 2번 함수 시작됨)
계산 완료: 1 + 1 = 2
함수 완료 : 1 + 1
계산 완료: 2 + 2 = 4
함수 완료 : 2 + 2
- main()의 addNumbers() 함수도 순서대로 실행되도록 하고 싶다면?
- main()에도 async - await 적용
- BUT await 키워드를 함수에 적용하려면 해당 함수가 Future를 반환해야 함 = > Furure 로 감싸기
- void 반환하는 경우? >> Future<void>
void main() async {
await addNumbers(1, 1);
await addNumbers(2, 2);
}
Future<void> addNumbers(int number1, int number2) async {
print('계산 시작 : $number1 + $number2');
// 서버 시뮬레이션
await Future.delayed(Duration(seconds: 2), (){
print('계산 완료: $number1 + $number2 = ${number1 + number2}');
});
print('함수 완료 : $number1 + $number2');
}
// 실행결과
계산 시작 : 1 + 1
계산 완료: 1 + 1 = 2
함수 완료 : 1 + 1
계산 시작 : 2 + 2
계산 완료: 2 + 2 = 4
함수 완료 : 2 + 2