SignalR Hub方法即使在浏览器关闭后也会继续运行

本文关键字:运行 继续 浏览器 方法 Hub SignalR | 更新日期: 2023-09-27 18:18:48

我有一个循环遍历一系列元素的方法,并向数据库添加一些东西。我使用SignalR来发布从服务器到客户端的实时进度。这一切都很好。

然而,当我关闭浏览器和/或点击"停止调试"按钮,该方法继续在后台运行!我可以判断,因为当我查询数据库时,它仍在添加记录,当我启动项目时,它将立即触发任何服务器端断点——即使这个方法在启动时没有调用。

如果我运行代码

for(int i=0;i<1000;i++) {
     do stuff with i
}

,然后在中途点击停止,我希望它停止。但SignalR似乎一直持续到1000,即使我点击停止并关闭浏览器。

SignalR Hub方法即使在浏览器关闭后也会继续运行

SignalR是一个实时通信框架,这意味着它不像HTTP请求那样,Web浏览器启动请求,服务器接收请求,客户端等待,直到服务器处理请求并发送请求,最后关闭连接(HTTP是无状态协议)。

如果在服务器端完成某些操作时关闭Web浏览器,并且该操作是使用SignalR启动的,则该操作不会结束。您需要从服务器发送心跳,而它正在进行长时间运行的操作,如果一些心跳没有被客户端应答,您的服务器代码将取消它。

心跳就像ping 。它只是发送一个hello,除了I'm here!