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