在signalR服务器端方法内运行无限循环来广播数据

时间:2015-09-27 21:06:54

标签: c# signalr signalr-hub

我需要不断地从阅读器读取数据并将其发送给呼叫者。 我创建了自托管窗口服务来充当signalR。我在里面开始无限循环。

public void ReadTags()
{
    try
    {
        while (true)
        {
            var store = Reader.Read();
            var tags = store.ToArray();
            Clients.Caller.getTagsRead(tags);
            System.Threading.Thread.Sleep(500);
        }
    }
    catch (Exception ex)
    {
            System.Diagnostics.EventLog.WriteEntry("Send", ex.Message + "\n" + ex.StackTrace);
    }
}

现在,我希望控制此方法,以便下次调用方法时能够暂停,播放或停止此循环。由于Hub每次都创建一个实例,这意味着循环将在不同的实例下运行。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为你应该在一个单独的帮助器中的Task内运行这个循环。可以通过IoC将此帮助程序设为Singleton。然后,您的集线器可以通过依赖注入接收帮助程序。这样,您就可以控制Task实例。

要将IoC与SignalR集成,我喜欢使用LightInject

最后,to call clients from outside the hubs