对于 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.CanBeCanceled
是 false
但 属性 是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 等同于重置一个流。
我创建了一个默认的 Blazor WASM ASP.NET 托管应用程序。
在 WeatherForecastController
Get
方法中我添加了参数 CancellationToken cancellationToken
:
[HttpGet] public IEnumerable<WeatherForecast> Get(CancellationToken cancellationToken)
现在,来自客户端的 http 调用是 Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast", CancellationToken.None)
所以我希望在服务器端 属性 cancellationToken.CanBeCanceled
是 false
但 属性 是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 等同于重置一个流。