見出し画像

[Flutter] asynchronous Operation(非同期処理)について

こんばんは。けんけんけんことげんです。

今日は非同期処理について触れていきたいと思います。

void finalconstの違い (){
  Duration dayAfterTomotrrow = Duration(days: 1);
  sleep(dayAfterTomorrow);
}

さて本題に入る前にですが、同期処理と非同期処理の違いみたいなのって、改めて考えると、よくわかんなかったりしませんか?

JSで非同期処理と言ったら、保存処理をページ遷移前に行ってくれる程度にしか理解していませんでしたが、改めてそこからまとめていきたいと思います。

同期処理と、非同期処理

同期処理は、一つ目のタスク=>2つ目のタスク=> 3つ目のタスク
のように、処理を進めてくれます。(Dartのsleepは同期処理です。)

非同期処理は、3つの処理を同時に進めてくれます。

// これは、同期処理
void main() {
 print('In case I dont see you');
 greetings1();
 greetings2();
 greetings3();
}

void greetings1() {
 print('Good afternoon');
}

void greetings2(){
   print('Good evening ');
 }

void greetings3() {
 print('And Good night');
}

ただ、ここでgreeting()する前に、タメを作りたい。例えば、2秒くらい時間を起きたい場合は、どうなるのか。well

void main() {
 print('In case I dont see you');
 Duration twosec = Duration(seconds: 2);
 Future.delayed(twosec, (){
   greetings1();
   greetings2();
  greetings3();
 });
}

void greetings1() {
 print('Good afternoon');
}

void greetings2(){
   print('Good evening ');
 }

void greetings3() {
 print('And Good night');
}

こうですね。
ここで、Futureクラスを持ってきてますが、ドキュメントはこちら
Durationはこっち

Futureは、現時点では、まだ起きていないけど、Durationで定義した時間のあとで、実行しますよってクラスだと考えてます。今後、色々試したら、またまとめてみたいと思います。

await, async

例えばgreeting2の結果を3に持っていきたいとなった時、greetingの処理が終わったら、greeting3の処理を行わないといけませんが、Futureは、非同期処理を行うので、このままだと、greeting3が先に表示されますね。

void main() {
 print('In case I dont see you');
 greetings1();
 greetings2();
 greetings3();
 
}


void greetings1() {
 print('Good afternoon');
 
}

void greetings2(){
 Duration twosec = Duration(seconds: 2);
   Future.delayed(twosec, (){
    print('Good evening ');
 });
 }

void greetings3() {
 print('And Good night');
}

これだと、台無しなので、待ってもらうgreeting3にはgreeting2を待ってもらう必要があります。そのためのawaitです。awaitoを使うためには、asyncが必要であり、asyncを使うためには、voidではなく、Futureを使う必要があります。
ここら辺がよくわかっていないので、今後学んでいけたらと思ってますが、結論コードは以下のようになります。

void main() async {
 print('In case I dont see you');
 greetings1();
 String text = await greetings2();
 greetings3(text);
 
}


void greetings1() {
 print('Good afternoon');
 
}

Future greetings2() async{
 String greet; 
 Duration twosec = Duration(seconds: 2);
   await Future.delayed(twosec, (){
    greet = 'Good evening ';
 });
 return greet;
 }

void greetings3(String greet) {
 print('$greet And Good night');
}

所感

実際Futureとか、使い方がいまいちぴんとこなくて手探りな部分はありますが、今後使って、理解していければなと思ってます。
早く自分のアプリを作れるようになりたい...

それではまた..おっと。


print (' in case I don'\t see ya good afternoon, good evening and good night! ')


元ネタ


この記事が気に入ったらサポートをしてみませんか?