Net.HttpClient Cancel ReadAsStringAsync?
本文关键字:ReadAsStringAsync Cancel HttpClient Net | 更新日期: 2023-09-27 18:17:10
我使用SendAsync
与HttpCompletionOption.ResponseHeadersRead
首先获得标题。接下来,我检查Content-Type
和Content-Length
,以确保响应是标记和大小是体面的。我使用CancellationTokenSource
来取消SendAsync
,如果它超过了一定的时间范围。
但是,如果类型和大小是正确的,我将继续使用ReadAsStringAsync
实际获取标记字符串。我可以为这个呼叫添加取消令牌吗?所以如果实际下载花费太长时间,我可以中止它。或者可以用其他方式来完成?
我不想使用GetStringAsync
,因为我使用自定义的HttpRequestMessage
。
PS :我是c#新手,2周。
不行。ReadAsStringAsync
没有接受取消令牌的重载,你不能取消一个不可取消的异步操作。
WithCancellation
扩展方法,该方法实际上不会取消该操作,但会让代码像已经执行过一样运行:
static Task<T> WithCancellation<T>(this Task<T> task, CancellationToken cancellationToken)
{
return task.IsCompleted
? task
: task.ContinueWith(
completedTask => completedTask.GetAwaiter().GetResult(),
cancellationToken,
TaskContinuationOptions.ExecuteSynchronously,
TaskScheduler.Default);
}
现在可在。net 5中使用:
ReadAsStringAsync(CancellationToken)
参考如果可以使用大锤,则可以处理HttpClient,这将关闭所有内容。与放弃不必要的GetStringAsync调用不同,这避免了浪费网络资源,从而加快了其他操作(可能包括您的下一个操作)。