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

本文关键字:无限循环 广播 数据 运行 signalR 服务器端 方法 | 更新日期: 2023-09-27 18:14:50

我需要从读取器连续读取数据并将其发送给调用者。我创建了自托管窗口服务作为信号。我在里面开始了无限循环

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每次都创建一个实例,这意味着循环将在不同的实例下运行。

我怎样才能做到这一点?

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

我认为您应该在单独的帮助器中的Task中运行此循环。该辅助器可以通过IoC生成Singleton。然后,您的hub可以通过依赖注入接收helper。这样,您就可以控制Task实例。

为了将IoC与SignalR集成,我喜欢使用LightInject。

最后,从集线器外部调用客户机