差分

ナビゲーションに移動 検索に移動

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

978 バイト追加, 2021年3月8日 (月) 07:27
ページの作成:「一般的なTaskを用いた非同期処理では、 * CancellationTokenSourceのCancelメソッドでキャンセル依頼を発行する * キャンセル時の例外…」
一般的なTaskを用いた非同期処理では、
* CancellationTokenSourceのCancelメソッドでキャンセル依頼を発行する
* キャンセル時の例外はOperationCanceledException

<source lang="csharp">
try
{
await HogeHogeTaskAsync(cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
Console.WriteLine("cancel");
}
</source>


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

<source lang="csharp">
try
{
await webclient.DownloadStringTaskAsync("http://localhost:53701/hello?wait=10000");
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.RequestCanceled)
{
Console.WriteLine("cancel");
}
else
{
throw;
}
}
</source>

案内メニュー