我需要不断地从阅读器读取数据并将其发送给呼叫者。 我创建了自托管窗口服务来充当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每次都创建一个实例,这意味着循环将在不同的实例下运行。
我怎样才能做到这一点?
答案 0 :(得分:0)
我认为你应该在一个单独的帮助器中的Task
内运行这个循环。可以通过IoC将此帮助程序设为Singleton
。然后,您的集线器可以通过依赖注入接收帮助程序。这样,您就可以控制Task
实例。
要将IoC与SignalR集成,我喜欢使用LightInject。