■ VisualBasic #8:非同期処理

VisualBasicで非同期処理を使うには?
前回記事:VisualBasic #7:デザインガイド


AsyncとAwaitキーワードを使えば良い。

例えば、メソッドに以下のような処理があった場合:
Private Sub InitProc()
    Call 処理1 (画面表示の軽い処理)
    Call 処理2 (重い処理)
    Call 処理3 (画面表示の軽い処理)
End Sub
[処理2]は時間がかかる重い処理のため、処理が終わるまで[処理3]の画面表示は行われない。
そればかりか、[処理1]の画面表示も行われない。
そこで重たい処理を非同期化する。
Private Async Sub InitProc()
    Call 処理1 (画面表示の軽い処理)
    Dim task as Task = Task.Run (
    Sub()
        Call 処理2 (重い処理)
    End Sub
    )
    Await task
    Call 処理3 (画面表示の軽い処理)
End Sub
ポイントとして、
1) Taskオブジェクトを作成し、その中に重い処理を記述
2) AwaitでTaskオブジェクトを実行
3) 処理全体(InitProcの宣言)に Async を追加

こうすることで、
1) [処理2]を呼び出した時点でInitProcはいったん終了し、処理を続行 ([処理2]はバックグラウンドで動作)
 → Await による動作
2) [処理2]が終了すると [処理3]に処理が戻る
 → Async による動作
となる。



次回記事: VisualBasic #9:Date型にNothingを代入するには?


VisualBasic

0 件のコメント:

その他の記事