flutter에서 사용하는 dart 언어의 비동기 알아보기
오늘도 flutter에서 사용하는 dart언어를 알아보려 합니다.
이번 포스팅에서는 비동기에 대해서 작성합니다.
비동기
단일 쓰레드로 실행되기 때문에 특정 동작을 기다리면 멈출 수 있습니다.
그래서 async, await 혹은 Future API를 사용하여 비동기 작업으로 해야 합니다.
void main() {
hello() => Future.delayed(Duration(seconds: 1),()=>"hello, world");
Future func() async{
var test = await hello();
print(test);
}
func();
print("delayed <hello,world>");
우선 처음으로 1초 동안 잠시 딜레이되고 문자열이 반환되는 hello라는 함수를 만듭니다.
그리고 await를 이용하여 hello 함수에서 반환되는 순간까지 기다리다가 출력하게 합니다.
그러므로 delayed hello,world라는 문자열이 우선 출력되고 func가 수행됩니다.
var fail = 0;
error() => Future.delayed(Duration(seconds: 1),() => fail == null);
Future handleError() async{
var test = await error();
try{
assert(test);
}
catch(e){
print(e);
}
}
handleError();
print("delayed <assert>");
try catch문으로 예외처리할 때에도 오류를 기다리다가 수행될 수 있습니다.
이 역시 delayed assert 문자열이 우선 출력됩니다.
Future<String> future() => Future.delayed(Duration(seconds: 1),()=>"future api");
Future<void> printDelayed() {
return future().then((str)=>print(str));
}
printDelayed();
print("delayed <future api>");
}
async, await가 없을 때는 future api로 동일한 코드를 작성할 수 있습니다.
딜레이를 일으키는 future() 함수로 수행할 작업을 then 콜백으로 지정합니다.
결과적으로 printDelayed라는 함수는 future라는 함수가 수행되기 전까지 기다리다가 반환이 되는 순간에 문자열이 출력되게 됩니다.
Written on January 2, 2019