我有一个C#应用程序,它是自托管SignalR 2.0.3。
在关闭进程之前不久,我正在处理OWIN主机组件(据我所知,关闭SignalR的唯一方法),如下所示:
static void Main(string[] args)
{
var signalrHost = Microsoft.Owin.Hosting.WebApp.Start(url);
//do things
signalrHost.Dispose();
Console.WriteLine("Press [Enter] to exit ...");
Console.ReadLine();
}
我知道在调用Dispose
后没有客户端在集线器上调用任何内容。同样,服务器在调用HubContext
之前调用Dispose
上的方法。
然而我假设当我调用Dispose
时,内部排队的消息会出错。也就是说,似乎Dispose
不等到SignalR的所有内容都被"刷新"。
我这样说是因为我的控制台窗口在退出之前就已经填满了SignalR错误,并且连接的客户端没有收到一些最终消息。
现在,如果我在调用Thread.Sleep
之前输入任意Dispose
,那么一切都会彻底关闭。但这让我想到要睡多久。
有没有办法知道何时可以在不导致这些错误的情况下致电Dispose
?