2014-06-17 84 views
4

例如,我有一個會觸發一個事件的類,以及該事件的1000個訂閱者。是單個線程用於逐個觸發每個用戶委託嗎?或者.Net使用線程池來並行處理部分或全部訂閱?c#事件是串行處理還是並行處理?

+1

儘管您可以更改事件提升代碼以便自己對其進行並行處理。 (你在問這個問題之前試過了嗎?) –

+0

兩種方式,請參考[this](http://stackoverflow.com/questions/1516119/c-sharp-events-how-to-process-event-in-a-並行) –

+0

你爲什麼不自己嘗試一下?抄寫1000次並保存該方法執行的時間。好的問題通過。 – Kimmax

回答

2

正如Tigran所說,事件調用是連續的。如果其中一個用戶在某個時候拋出一個異常,那麼其他用戶將不會被觸發。

最簡單的方式來觸發並行事件將

public event Action Event; 

    public void Trigger() 
    { 
     if (Event != null) 
     { 
      var delegates = Event.GetInvocationList(); 
      Parallel.ForEach(delegates, d => d.DynamicInvoke()); 
     } 
    } 

此實現將相同的問題遭受了異常的情況。

3

原樣,事件是簡單的連續調用。如果你想要你可以以異步方式運行它,但這是一個實現細節。

簡而言之:沒有任何內置的並行化或標準.NET異步事件,由您來實現它。