「.NETのWebClientで非同期処理をキャンセルする」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (ページの作成:「一般的なTaskを用いた非同期処理では、 * CancellationTokenSourceのCancelメソッドでキャンセル依頼を発行する * キャンセル時の例外…」) |
Administrator (トーク | 投稿記録) |
||
(同じ利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
一般的なTaskを用いた非同期処理では、 | 一般的なTaskを用いた非同期処理では、 | ||
− | * | + | * キャンセル依頼はCancellationTokenSourceのCancelメソッド |
* キャンセル時の例外はOperationCanceledException | * キャンセル時の例外はOperationCanceledException | ||
16行目: | 16行目: | ||
一方、WebClientの○○TaskAsync系メソッドにはCancellationTokenSourceを指定する引数がなく、 | 一方、WebClientの○○TaskAsync系メソッドにはCancellationTokenSourceを指定する引数がなく、 | ||
− | * | + | * キャンセル依頼はWebClientのCancelAsyncメソッド |
* キャンセル時の例外はWebException | * キャンセル時の例外はWebException | ||
** StatusプロパティにRequestCanceledが設定されている | ** StatusプロパティにRequestCanceledが設定されている | ||
37行目: | 37行目: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | [[category: .NET]] |
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;
}
}