首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# Net.HttpClient是否取消ReadAsStringAsync?

C# Net.HttpClient是否取消ReadAsStringAsync?
EN

Stack Overflow用户
提问于 2014-08-09 21:54:24
回答 3查看 2.8K关注 0票数 9

我使用带有HttpCompletionOption.ResponseHeadersReadSendAsync首先获取头文件。接下来,我检查Content-TypeContent-Length以确保响应是标记的,并且大小合适。如果超过一定的时间跨度,我会使用CancellationTokenSource来取消SendAsync

但是,如果类型和大小正确,我将继续使用ReadAsStringAsync实际获取标记字符串。是否可以向此调用添加取消令牌?因此,如果实际下载时间太长,我可以中止下载。或者可以用任何其他方式来完成?

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

PS__:我是C#的新手,2周。可能有什么东西在躲避我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-17 23:55:51

这在.NET 5中现已可用:

ReadAsStringAsync(CancellationToken) 

reference

票数 2
EN

Stack Overflow用户

发布于 2014-08-09 21:58:50

不,你不能。有接受取消令牌的no overload of ReadAsStringAsync,你可以can't cancel a non-cancelable async operation

但是,您可以放弃该操作,继续使用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);
}
票数 5
EN

Stack Overflow用户

发布于 2018-07-24 04:53:21

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25219287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档