メインメニューを開く

.NETのWebClientで非同期処理をキャンセルする

一般的なTaskを用いた非同期処理では、

  • キャンセル依頼はCancellationTokenSourceのCancelメソッド
  • キャンセル時の例外はOperationCanceledException
try 
{
    await HogeHogeTaskAsync(cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
    Console.WriteLine("cancel");
}


一方、WebClientの○○TaskAsync系メソッドにはCancellationTokenSourceを指定する引数がなく、

  • キャンセル依頼はWebClientのCancelAsyncメソッド
  • キャンセル時の例外はWebException
    • StatusプロパティにRequestCanceledが設定されている
try
{
    await webclient.DownloadStringTaskAsync("http://localhost:53701/hello?wait=10000");
}
catch (WebException we)
{
    if (we.Status == WebExceptionStatus.RequestCanceled)
    {
        Console.WriteLine("cancel");
    }
    else 
    {
        throw;
    }
}