对于 HttpClient,CancellationToken CanBeCanceled 始终为真

CancellationToken CanBeCanceled always true with HttpClient

我创建了一个默认的 Blazor WASM ASP.NET 托管应用程序。

WeatherForecastController Get 方法中我添加了参数 CancellationToken cancellationToken:

[HttpGet] public IEnumerable<WeatherForecast> Get(CancellationToken cancellationToken)

现在,来自客户端的 http 调用是 Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast", CancellationToken.None) 所以我希望在服务器端 属性 cancellationToken.CanBeCanceledfalse 但 属性 是true!

我也试过: Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast")Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast", default(CancellationToken))

但是在服务器上 CanBeCanceled 属性 总是 true

为什么?

如何使用 CanBeCanceled = false 的默认 cancellationToken?

谢谢

这不是同一个取消标记。 HTTP 中没有取消的概念 (at all),更不用说传递 .NET 取消令牌的一些特定工具了。

服务器端代表“客户端断开连接”1,这总是有可能的。

How to have a default cancellationToken with CanBeCanceled = false?

这怎么可能是实际要求?客户端无法保证它将保持连接并能够接收到服务器生成的响应。


1传递给 HttpClient 的本质上是“如果取消,请断开连接”,或者 HTTP 2 等同于重置一个流。