「C#による非同期ソケット通信」でソケット通信の非同期処理について書きましたが、今回は「Task」、「async」、「await」を使ったHTTP通信の非同期処理について書きます。
HttpClientメソッドを使ったHTTPの非同期クライアント処理を次に示します。
- 1行目は、非同期メソッドとするためキーワード「async」付け、戻り値を「Task
」(実際には単にstring)とします。 - 6行目で戻り値はTask
はstringを返し、Task を指定した場合、returnでT型の値を返します。 - 5-6行目で、キーワード「」によりその処理は非同期(別スレッド)で行われ、その処理が終わると、以降の処理を行います。
public async Task<string> SendData(string url, StringContent content) { using (var client = new HttpClient()) { var response = await client.PostAsync(url, content); return await response.Content.ReadAsStringAsync(); } }
作成したHTTPの非同期クライアント処理の呼び出しロジックを次に示します。
- 3行目の「SendTime」はタイマーイベントのメソッドのため、「async Task」でなく「async void」とします。
- 6行目でHTTPの非同期クライアント処理「SendData」をキーワード「await」を付けて呼び出します。別スレッドで実行され、以降の処理は「SendData」からの応答が受け取ると実行されます。
string url = 'http://xxxx'; string data = 'HTTP Test'; public async void SendTime(object sender, EventArgs e) { var content = new StringContent(data); var response = await SendData(url, content); }