ASP.NET WebForms で非同期処理を行う (.net4.5)

WebPageではasync/awaitをそのまま使うことができません。
利用するには以下の手順を踏みます。

1,Web.config設定

/configuration/appSettingsに、key=UseTaskFriendlySynchronizationContextな項目を追加。
詳細は下記を参照。

<configuration>
  ....
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    ....
  </appSettings>
  ....
</configuration>

2,aspxファイルのページディレクティブ設定

末尾の「Async="true"」を追加する。コード例は下記を参照。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="Sample.WebForm" Async="true" %>

3,RegisterAsyncTaskメソッドに非同期タスク登録

Page.RegisterAsyncTask()に非同期なタスクを登録する。コード例は下記を参照。
登録タスクを実行するには、Page.ExecuteRegisteredAsyncTasks()を明示的に呼び出す必要あり。
未実行タスクはPreRenderイベントとPreRenderCompleteイベントの間で実行される。

protected override void OnLoad(EventArgs e)
{
    ....
    RegisterAsyncTask(new PageAsyncTask(async () =>
    {
        var httpClient = new System.Net.Http.HttpClient();
        var res = await httpClient.GetAsync("http://localhost/Hogege");
        ....
    }));
    ....
}