如何区分 HttpClient.CancelPendingRequests 和 CancellationTokenSource
How to tell the difference of HttpClient.CancelPendingRequests and CancellationTokenSource
我正在使用 System.Net.Http.HttpClient,现在我有两个取消请求选项。
请求超时,使用
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(8000);
HttpResponseMessage response = await client.GetAsync(strRequestUrl, cancellationTokenSource.Token);
用户取消 HttpClient.CancelPendingRequests()
。
两种方法都导致了TaskCanceledException
,但如何区分它们。
两个来源生产的 TaskCancelledException
之间没有区别。但是,由于您在范围内分配了 CancellationTokenSource
,您可以轻松地询问它是否已设置:
using (var tokenSource = new CancellationTokenSource(8000))
{
try
{
var resp = await httpClient.GetAsync("https://www.example.com",
tokenSource.Token);
// ...
}
catch (TaskCanceledException)
{
var cancelledBecauseOfTimeout = tokenSource.IsCancellationRequested;
// handle accordingly
}
}
我正在使用 System.Net.Http.HttpClient,现在我有两个取消请求选项。
请求超时,使用
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(8000);
HttpResponseMessage response = await client.GetAsync(strRequestUrl, cancellationTokenSource.Token);
用户取消
HttpClient.CancelPendingRequests()
。
两种方法都导致了TaskCanceledException
,但如何区分它们。
两个来源生产的 TaskCancelledException
之间没有区别。但是,由于您在范围内分配了 CancellationTokenSource
,您可以轻松地询问它是否已设置:
using (var tokenSource = new CancellationTokenSource(8000))
{
try
{
var resp = await httpClient.GetAsync("https://www.example.com",
tokenSource.Token);
// ...
}
catch (TaskCanceledException)
{
var cancelledBecauseOfTimeout = tokenSource.IsCancellationRequested;
// handle accordingly
}
}