Signalr 如何监视signar主机的死锁或长时间运行的线程?
作为一个测试示例,我有一个hub public方法,它有一个长时间运行的循环Signalr 如何监视signar主机的死锁或长时间运行的线程?,signalr,Signalr,作为一个测试示例,我有一个hub public方法,它有一个长时间运行的循环 public class testhub : Hub { public void looptest() { while(true){ <do something> } } public void chatmsg() {......} } 公共类testhub:Hub { 公开测试() { while(true){} } 公共无效chatmsg() {......} } 客
public class testhub : Hub
{
public void looptest()
{
while(true){ <do something> }
}
public void chatmsg()
{......}
}
公共类testhub:Hub
{
公开测试()
{
while(true){}
}
公共无效chatmsg()
{......}
}
客户端连接集线器并将其命名为-->testhub.server.looptest客户端B连接集线器并将其命名为-->testhub.server.looptest 作为服务器管理员,如何在不关闭整个IIS或自主机集线器的情况下监视主机集线器中的所有线程,并杀死任何我想要的线程?
例如,假设我构建了如下UI: 任务运行时操作
-------------------
回路测试5H33分钟(按钮关闭)
回路测试0h12min(按钮关闭)
chatmsg 1sec(button kill)您当然可以使用跟踪活动中心方法执行的自定义方法来构建一些度量报告,以便获得所需的可见性,但对于“杀死”任何东西,都不支持这种方法。这意味着您可能想要杀死一个线程,该线程在任何正在运行的程序(.NET或其他)中都有不确定的副作用,并且您永远无法确定您没有让程序处于一个糟糕的整体状态 如果您真的需要这一点,并且希望通过注入一个定制的hub方法调用实现来高度定制SignalR框架,您可能会做一件事,该实现可能了解如何将参数传递到支持它的方法签名中,以便这些方法能够遵守逻辑取消请求,但即使是选择加入,也意味着实现实际上必须包括对其循环逻辑中某个地方的调用(或优雅的检查)