WebClientクラスを使用して async と await の基本的な使い方の説明を記載します。
使用するメソッドは、同期(DownloadString)、非同期(DownloadStringTaskAsync)を使用して説明します。
同期メソッドDownloadString を使用してダウンロード
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As Uri = New Uri("http://microsoft.com")
Dim client = New WebClient()
Debug.WriteLine("--- Start ---")
Dim s = client.DownloadString(url)
Debug.WriteLine(s)
Debug.WriteLine("--- End ---")
End Sub
表示結果は
--- Start --- <html><head> ・・・(省略) --- End ---
次に
非同期メソッドDownloadStringTaskAsync を使用してダウンロード
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As Uri = New Uri("http://microsoft.com")
Dim client = New WebClient()
Debug.WriteLine("--- Start ---")
Dim s = client.DownloadStringTaskAsync(url)
Debug.WriteLine(s)
Debug.WriteLine("--- End ---")
End Sub
表示結果
--- Start --- System.Threading.Tasks.Task`1[System.String] --- End ---
ダウンロードされた内容が取得できません。
そこで、Async と Await を使用して内容を取得します。
非同期での Async と Awaitの使用方法
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As Uri = New Uri("http://microsoft.com")
Dim client = New WebClient()
Debug.WriteLine("--- Start ---")
Dim task As Task(Of String) = client.DownloadStringTaskAsync(url)
Debug.WriteLine(task)
Debug.WriteLine("--- End ---")
Debug.WriteLine("--- Await Start ---")
Dim s As String = Await task 'ここで処理待ちをする
Debug.WriteLine(s)
Debug.WriteLine("--- Await End ---")
End Sub
表示結果
--- Start --- System.Threading.Tasks.Task`1[System.String] --- End --- --- Await Start --- <html><head> ・・・省略 --- Await End ---
上記のいらないところを消して簡単にすると
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As Uri = New Uri("http://microsoft.com")
Dim client = New WebClient()
Dim s As String = Await client.DownloadStringTaskAsync(url)
Debug.WriteLine(s)
End Sub