C#でAPIのコールなどに使われるHttpClientクラス(System.Net.Http名前空間)でタイムアウトを設定・制御する方法です。
- HttpClientのTimeoutプロパティ(TimeSpanクラス)にタイムアウト時間を設定する(デフォルトは100秒)
- タイムアウト時にTaskCanceledExceptionがスローされるので、それをキャッチしてタイムアウト時の処理を記述する
using System; using System.Net.Http; using System.Threading.Tasks; namespace ConsoleApplication { public class Program { public static void Main() { GetKenikki().Wait(); } private static async Task GetKenikki() { var client = new HttpClient(); // タイムアウト時間の設定(3秒) client.Timeout = TimeSpan.FromMilliseconds(3000); try { // このブログへGETアクセス var response = await client.GetStringAsync("http://ohke.hateblo.jp/"); Console.WriteLine(response); } catch (TaskCanceledException e) { // タイムアウトの場合、TaskCancelExceptionがスローされる Console.WriteLine(e.Message); } } } }
タイムアウト時間を1msなどに設定すると、例外がスローされることを確認できます。
System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.HttpClient.<FinishSendAsync>d__58.MoveNext() ・・・