Future, Isolate
다트에서 이벤트 루프에 등록되는 애들이 있음
보통은 다 바로 시작이 되는데 이벤트 루프에 등록되는 애들은 특징이 main()이 종료되어야지 실행
- network
 - I/O (file 읽기 쓰기)
 - Future(약속)
 
Future
import 'dart:io';
void download(){
    sleep(Duration(seconds:5));
    print('다운완료');
}
main(){
    download();
    print("메인종료");
}
----
다운완료
메인종료
----
- 실행 순서
 
import 'dart:io';
void download(){
Future.delayed(Duration(seconds:5),(){
        print('이벤트 실행됨'): // 3
    });
    print('다운완료'); // 1
}
main(){
    download();
    print("메인종료"); // 2
}
----
다운완료
메인종료
이벤트 실행됨
----
- Future return
 
import 'dart:io';
Future<String> download(){
// Future는 빈박스이다.
// 먼저 value는 빈박스(null)를 만들고 5초뒤 return을 받음
Future<String> value = Future.delayed(Duration(seconds:5),(){
        return '사과'; // 5초뒤에 return을 받음
    });
return value; // Futurn data는 Future로 받아야함
}
// 첫번째 방법
// await를 사용하기 때문에 async 키워드 필요
main() async {
    //빈박스를 먼저 받아오기 때문에 Future로 받아야함
    //그렇기에 기다릴 필요가 있음 -> await 사용 -> async 키워드 필요
    // Future<String> value = download();
    // 기다렸다 받기 때문에 Future로 받을 필요없음
    String value = await download();
    print(value);
}
// 두번째 방법
main(){
    download().then((value){
        // 빈박스가 채워져야 실행됨
        print(value);
    });
//메인 종료 후 download return 받음
}
Isolate
- 동시에 실행
 
void download(var msg){
    Future((){
        for(int i = 0; i < 5; i++){
            sleep(Duration(seconds:1));
            print("download함수 : ${i}");
        }
    });
}
main(){
    // 독립적인 스레드
    Isolate.spawn(download,'msg');
    for(int i = 0; i < 5; i++){
        sleep(Duration(seconds:1));
        print("main함수 : ${i}");
    }
}
isolate는 다른 언어의 스레드와 똑같음
다른 점은 heap을 공유하지 않음. 독립적인 heap이 있음
int num = 10;
void change(var value){
    num = value;
    print("change : ${num}");
}
void check(var value){
    print("check : ${num}");
}
void main(){
    Isolate.spawn(change,20);
    Isolate.spawn(check,"");
}
---
check : 10
change : 20
---
어떤 이벤트가 들어왔을때 이 이벤트 때문에 오래 기다려야할 땐 Future
동시 실행 하고 싶을땐 isolate
728x90
    
    
  'Study > Dart' 카테고리의 다른 글
| [Dart] future, async, await, 실행순서 (0) | 2021.06.15 | 
|---|---|
| [Dart] const 와 final 이해하기 (0) | 2021.06.15 | 
| [Dart] 상속을 쓰는 이유 (0) | 2021.06.07 | 
| [Dart] 상속 (0) | 2021.06.07 | 
| [Dart] 접근지정자, 생성자, getter, setter (0) | 2021.06.04 |