C#Net.HttpClient取消ReadAsStringAsync?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (181)

我用SendAsync和HttpCompletionOption.ResponseHeadersRead来获取头文件。接下来我检查Content-TypeContent-Length确保响应是标记并且大小合适。如果超过某个时间跨度,我使用a CancellationTokenSource来取消SendAsync它。

但是,如果类型和大小正确,我继续实际获取标记字符串ReadAsStringAsync我可以在此通话中添加取消令牌吗?因此,如果实际下载时间过长,我可以中止它。或者这可以通过其他方式完成吗?

我不想使用,GetStringAsync因为我使用自定义HttpRequestMessage

提问于
用户回答回答于
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);
}
用户回答回答于

如果可以使用大锤子,你可以处理HttpClient,这将关闭所有东西。与放弃对GetStringAsync的不必要调用不同,这可以避免浪费网络资源,从而加快其他操作(可能包括你的下一次操作)。

扫码关注云+社区

领取腾讯云代金券