2015-09-27 27 views
0

我需要不斷從閱讀器讀取數據並將其發送給調用者。 我創建了自己託管的窗口服務來充當signalR。我在裏面開始了無限循環。在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

我想你應該在一個單獨的幫手中運行Task這個循環。這位助手可以通過IoC製作Singleton。您的中心可以通過依賴注入來接收幫助。這樣,您就可以控制Task實例。

爲了將IoC與SignalR集成,我喜歡使用LightInject

最後,to call clients from outside the hubs