「.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;
    }
}