2014-06-17 42 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异步事件,由您来实现它。