「.NETのWebClientで非同期処理をキャンセルする」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「一般的なTaskを用いた非同期処理では、 * CancellationTokenSourceのCancelメソッドでキャンセル依頼を発行する * キャンセル時の例外…」)
 
37行目: 37行目:
 
}
 
}
 
</source>
 
</source>
 +
 +
[[category: .NET]]

2021年3月8日 (月) 07:27時点における版

一般的な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;
    }
}