Net.HttpClient Cancel ReadAsStringAsync?

本文关键字:ReadAsStringAsync Cancel HttpClient Net | 更新日期: 2023-09-27 18:17:10

我使用SendAsyncHttpCompletionOption.ResponseHeadersRead首先获得标题。接下来,我检查Content-TypeContent-Length,以确保响应是标记和大小是体面的。我使用CancellationTokenSource来取消SendAsync,如果它超过了一定的时间范围。

但是,如果类型和大小是正确的,我将继续使用ReadAsStringAsync实际获取标记字符串。我可以为这个呼叫添加取消令牌吗?所以如果实际下载花费太长时间,我可以中止它。或者可以用其他方式来完成?

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

PS :我是c#新手,2周。

Net.HttpClient Cancel ReadAsStringAsync?

不行。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调用不同,这避免了浪费网络资源,从而加快了其他操作(可能包括您的下一个操作)。

相关文章:
  • 没有找到相关文章