前提
C#のasync awaitについてですが、
下記のようなものがあったとします
C#
1 public async void AwaitCheck(Func<Task> func) 2 { 3 await func(); 4 5 int j = 6; 6 } 7 8 private async void Button_Click_1(object sender, RoutedEventArgs e) 9 { 10 AwaitCheck( 11 async () => 12 { 13 await Task.Delay(1000); 14 int i = 5; 15 return; 16 } 17 ); 18 int f = 6; 19 }
この時Button_Click_1を行うと、
AwaitCheckは終了を待機していないので、
await Task.Delay(1000);
の完了を待たずに
int f = 6;
の処理に入ります。
ここまでは理解できるのですが、
以下のようなコードにすると
C#
1 public async Task AwaitCheck(Func<Task> func) 2 { 3 await func(); 4 5 int j = 6; 6 } 7 8 private async void Button_Click_1(object sender, RoutedEventArgs e) 9 { 10 await AwaitCheck( 11 async () => 12 { 13 await Task.Delay(1000); 14 int i = 5; 15 return; 16 } 17 ); 18 int f = 6; 19 }
上記では
AwaitCheckをawaitしており、
処理準的にはAwaitCheckの終了を待機し、
のちに
int f = 6;
の処理が行われたのですが、
この場合最初のパターンをふまえると
Button_Click_1内での処理は待機されているが、
Button_Click_1の処理自体は終了を待たずに次の処理に進んでいるという理解で大丈夫でしょうか?
また、async awaitを用いたメソッドを使用する際
それらを使用するメソッド内でもすべてasync awaitを用いて制御するしかないのでしょうか?
※例えばUWPでフォルダを取得する際、StorageFolder.GetFolderAsyncを用いると
awaitで取得しなければならず、それらを使用し処理順を制御する場合、
すべてasync awaitで制御しなければならないか
Task.Waitというものがあったので一度使用してみたのですが、
Waitの処理内でawaitの処理があるとロックされてしまうなどがあり、
こちらは使用したくありません。
知りたいこと
①async awaitの処理順について
②async awaitを用いた処理の制御方法
初歩的な質問で申し訳ございません。
いろいろなサイトを参考にしたのですが、
実際の実行順だけでは自信を持てず質問させていただきました。
このようなサイトでの質問もまだ慣れておらず、情報不足ありましたら
ご指摘ください。
宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
・OS バージョン Windows10