use*_*158 5 c# web-services httpclient cancellation-token
我正在尝试为 OWIN Web 服务创建一个客户端,如果请求被取消,该客户端会通知服务,以便该服务也可以取消该请求当前正在进行的工作。
在服务器端,我有一个具有以下方法的 ApiController:
[HttpGet]
[Route("Get")]
public int Get(CancellationToken ct)
{
Console.WriteLine("started!");
while (!ct.IsCancellationRequested)
{
Thread.Sleep(500);
}
Console.WriteLine("canceled!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我通过 Edge 访问 API,它会起作用(一旦中止加载、导航到其他地方、关闭选项卡或关闭浏览器,我就会收到“已取消!”消息),但使用我尝试过的所有其他方法(Chrome、Postman 、HttpClient、HttpWebRequest),CancellationToken 不会被取消。Edge 与所有其他应用程序有何不同?可以采取哪些措施使其与 HttpClient 配合使用?我尝试使用 CancellationToken 调用 GetAsync() 并取消它,我尝试了 HttpClient 的 Dispose() 和 CancelPendingRequests() 方法,但它们都没有触发服务器端取消。
更新 Nuget 包后
Microsoft.Owin
Microsoft.Owin.Host.HttpListener
Microsoft.Owin.Hosting
Microsoft.Owin.SelfHost
Run Code Online (Sandbox Code Playgroud)
到 v3.1.0,取消功能不仅可以从 Edge 中按预期进行,还可以从 Chrome 和 HttpClient 中按预期进行。我再次将软件包降级到 v2.0.0 以排除其他原因,并可以确认新版本解决了问题。不过,我仍然很好奇为什么它在升级之前就可以在 Edge 中运行。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |