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