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);
}