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

提供:MonoBook
編集の要約なし
編集の要約なし
 
1行目: 1行目:
一般的なTaskを用いた非同期処理では、
一般的なTaskを用いた非同期処理では、
* キャンセル依頼発行はCancellationTokenSourceのCancelメソッド
* キャンセル依頼はCancellationTokenSourceのCancelメソッド
* キャンセル時の例外はOperationCanceledException
* キャンセル時の例外はOperationCanceledException


16行目: 16行目:


一方、WebClientの○○TaskAsync系メソッドにはCancellationTokenSourceを指定する引数がなく、
一方、WebClientの○○TaskAsync系メソッドにはCancellationTokenSourceを指定する引数がなく、
* キャンセル依頼発行はWebClientのCancelAsyncメソッド
* キャンセル依頼はWebClientのCancelAsyncメソッド
* キャンセル時の例外はWebException
* キャンセル時の例外はWebException
** StatusプロパティにRequestCanceledが設定されている
** StatusプロパティにRequestCanceledが設定されている

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

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