我正在尝试为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;
}
如果我通过Edge访问API,它可以工作(我在中止加载后立即取消"取消!"消息,在其他地方导航,关闭选项卡或关闭浏览器),但是我试过的其他方法(Chrome,Postman,HttpClient,HttpWebRequest),CancellationToken都没有被取消。 Edge与其他所有应用程序有什么不同,以及如何使它与HttpClient一起使用?我尝试使用CancellationToken调用GetAsync()并取消它,我尝试了HttpClient的Dispose()和CancelPendingRequests()方法,但没有一个触发服务器端取消。
答案 0 :(得分:1)
更新Nuget包后
Microsoft.Owin
Microsoft.Owin.Host.HttpListener
Microsoft.Owin.Hosting
Microsoft.Owin.SelfHost
到v3.1.0,取消工作不仅来自Edge,还来自Chrome和HttpClient。我再次将软件包降级到v2.0.0以排除其他原因并确认新版本解决了问题。我仍然很好奇为什么它在升级之前就在Edge中工作了。