0

我有這樣的類循環傾聽的東西,並通知訂戶有關事件。聽和通知使用任務

這個類是否正確,或者使用TPL有更好的實現?

public class Listener 
{ 
    public event EventHandler EventRaised; 
    private void RaiseEvent() 
    { 
     if(EventRaised!=null)EventRaised(someParam); 
    } 
    public Task Listen() 
    { 
     return Task.Factory.StartNew(
     () => 
     { 
      while(true) 
      { 
       //listen for some event 
       RaiseEvent(); 
      } 
     }, token, TaskCreationOptions.LongRunning, TaskScheduler.Default); 
    } 
} 

var listener = new Listener(); 
listener.EventRaised += SomeMethod; 
listerner.Listen(); 

我問有關通知在後臺的一些事件訂戶約最好的辦法。

+0

這裏你的目標是什麼?這門課沒有意義... –

+0

查看主題,我編輯了它。 – IEnumerable

+0

這個課程將在一個永無止境的循環中不斷地「通知」用戶,然後吃掉CPU ......你究竟在做什麼? –

回答

0

這絕對是一種做法,但您也可以使用Rx庫。我建議不要在你的任務中有一段時間,因爲任務意味着終止。在某些時候,無論是來自例外還是錯誤。使用Task.ContinueWith方法可能是更好的選擇。

+0

而我怎樣才能讓'永遠'無休止的循環?我需要在程序工作期間全程聆聽。 – IEnumerable

+0

爲遞歸調用創建一個ContinueWith負載以及用於錯誤檢查和異常處理的其他方法。 –

+0

@IEnumerable這個問題有一個答案,很好地說明了這一點。 http://stackoverflow.com/questions/7654632/how-do-i-write-a-scalable-socket-server-using-c-sharp-4-0 –