본 글은 [Do it! 깡샘의 플러터&다트 프로그래밍] 의 내용을 발췌한 것입니다.
책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.
퓨처와 스트림은 한 줄기 수행 흐름에서 비동기 처리를 합니다. 다트 애플리케이션은 메인 함수부터 실행되는데 이 메인 함수의 수행 흐름을 메인 아이솔레이트(또는 루트 아이솔레이트)라고 합니다. 이 메인 아이솔레이트에서 퓨처나 스트림 등의 비동기 처리가 수행됩니다.
만약 메인 아이솔레이트 하위에 새로운 수행 흐름을 만들고 싶다면 별도의 아이솔레이트를 만들어야 합니다.
이처럼 새로운 아이솔레이트를 만들려면 spawn() 함수를 이용합니다. 그리고 아이솔레이트에서 처리할 로직은 함수로 작성합니다. 이 함수는 클래스의 맴버로 선언할 수도 있고 톱 레벨에 선언할 수도 있습니다. 아이솔레이트에서 실행할 함수를 spawn() 함수의 매개변수로 지정하면 새로운 아이솔레이트가 시작될 때 실행됩니다.
다음 코드에서 onPress()는 화면의 버튼을 클릭할 때 호출되는 함수로 메인 아이솔레이트에서 실행됩니다. 이 함수에서 spawn() 함수로 아이솔레이트를 2개 만들었습니다. Spawn() 함수의 첫 번째 매개변수는 아이솔레이트가 실행할 함수이며, 두 번째 매개변수는 아이솔레이트를 실행할 때 전달할 데이터입니다. 아이솔레이트는 비동기로 동작하므로 메인 아이솔레이트에서 새로운 아이솔레이트를 실행하고 대기하지 않으며, 각각의 아이솔레이트는 개별적으로 실행됩니다.
import 'dart:isolate';
... (생략) ...
myIsolate1(var arg) {
Future.delayed(Duration(seconds: 3), () {
print('in myIsolate1... $arg');
});
}
class MyApp extends StatelessWidget {
myIsolate2(var arg) {
Future.delayed(Duration(seconds: 2), () {
print('in myIsolate2... $arg');
});
}
void onPress() {
print('onPress... before run isolate...');
Isolate.spawn(myIsolate1, 10);
Isolate.spawn(myIsolate2, 20);
print('onPress... after run isolate...');
}
... (생략) ...
}
책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.
'flutter' 카테고리의 다른 글
플러터 - Provider (0) | 2023.03.13 |
---|---|
플러터 - InheritedWidget (0) | 2023.03.13 |
플러터 - Future, FutureBuilder (0) | 2023.03.13 |
플러터 - dio (0) | 2023.03.13 |
플러터 - Navigation (0) | 2023.03.13 |