【问题标题】:Cancel request processing when user stopped page loading用户停止页面加载时取消请求处理
【发布时间】:2016-02-27 19:16:31
【问题描述】:

我在我的 Aspnet 5 (Aspnet Core) WebAPI 控制器中有一个动作,在被请求时可能需要很长时间,即使用户取消加载它也会运行到最后。 aspnet 中的请求或 conroller/httpContext 中的任何事件是否有任何取消令牌变体,可以帮助我在用户已经不需要其结果时停止操作?

如果使用cancellationToken,它永远不会改变它的状态:

[HttpGet]
public async Task<string> Get(CancellationToken cancellationToken)
{
    await Task.Run(() =>
    {
        while (!cancellationToken.IsCancellationRequested) ;
        return;
    });
    return "hi";
}

,同样回调传递给令牌的 Register 方法也从未被调用过。

【问题讨论】:

  • 似乎无法从客户端取消令牌
  • @KhanhTO,我认为服务器必须在 tcp 连接中止时更改令牌的状态,而且我当然不希望客户端传递任何令牌。

标签: c# asp.net-web-api asp.net-web-api2


【解决方案1】:

没有可靠的事件来处理浏览器加载停止。 IE有document.onstop事件,其他浏览器不支持。

也许您可以尝试类似的方法,将您的 ajax 调用放在 window.onload 事件中。 onload 事件在完全加载页面中使用的 DOM 和其他资源后触发。

因此,如果用户在完全加载之前停止页面加载,window.onload 事件不会被触发,因此您的 ajax 调用不会被执行。

【讨论】:

  • 我的客户端没有浏览器,只有http rest客户端,会断开连接。
  • 好的,你得看看this
  • 不幸的是,由于某种原因,cancellationToken 永远不会改变它的状态或发出关于请求取消的信号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多