c# - 如何区分 HttpClient.CancelPendingRequests 和 CancellationTokenSource
问题描述
我正在使用System.Net.Http.HttpClient,现在我有两个取消请求选项。
请求超时,使用
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(8000);
HttpResponseMessage response = await client.GetAsync(strRequestUrl, cancellationTokenSource.Token);
用户取消
HttpClient.CancelPendingRequests()
。
两种方法都引起了TaskCanceledException
,但是如何区分它们。
解决方案
TaskCancelledException
两种来源产生的a 之间没有区别。但是,由于您有一个已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
}
}
推荐阅读
- java - Neo4j:关系属性错误:属性值只能是原始类型或其数组
- php - Wordpress Navigation Walker 将 ul、li 更改为 div 和锚标签
- android - RetroFit 呼叫在第一次后失败
- vue.js - 无法使用 VueJS 登录 Auth0 SPA 中的某些用户
- c++ - 如何识别插槽中发出的信号?
- php - 将带有下拉菜单的文本插入数据库
- android - 如何在 Textview 中用文本填充整个空间?
- python - 导出为 CSV 文件
- javascript - 如何调用一个函数调用首先发生
- php - 获取“未定义的偏移量:2 错误(错误在:'participant_id' => $participants[$i]->id,)