例如,我有一个会触发一个事件的类,以及该事件的1000个订阅者。是单个线程用于逐个触发每个用户委托吗?或者.Net使用线程池来并行处理部分或全部订阅?c#事件是串行处理还是并行处理?
4
A
回答
2
正如Tigran所说,事件调用是连续的。如果其中一个用户在某个时候抛出一个异常,那么其他用户将不会被触发。
最简单的方式来触发并行事件将
public event Action Event;
public void Trigger()
{
if (Event != null)
{
var delegates = Event.GetInvocationList();
Parallel.ForEach(delegates, d => d.DynamicInvoke());
}
}
此实现将相同的问题遭受了异常的情况。
3
原样,事件是简单的连续调用。如果你想要你可以以异步方式运行它,但这是一个实现细节。
简而言之:没有任何内置的并行化或标准.NET
异步事件,由您来实现它。
相关问题
- 1. 机架可以串行处理还是同时处理请求?
- 2. 并行处理VS串行处理
- 3. C#事件处理行为
- 4. 并行处理一般事件处理器的事件
- 5. “正在处理”还是“已处理”?
- 6. Web服务是按顺序还是并行处理?
- 7. 并行处理
- 8. 并行处理
- 9. C#并行处理选项
- 10. C++线程 - 并行处理
- 11. 事件处理不运行
- 12. Poco C++事件是如何处理的?
- 13. C#处理事件
- 14. C++事件处理
- 15. 多并行并行处理
- 16. 并行处理中间件
- 17. 并行处理文件
- 18. 弹簧批处理 - 并行处理
- 19. Spring批处理并行处理
- 20. PHP - 并行处理
- 21. Django并行处理
- 22. PHPList并行处理
- 23. GNU并行处理
- 24. 并行处理 - Python
- 25. Symfony2并行处理
- 26. 并行处理Python
- 27. VHDL处理并行
- 28. 并行处理 - JMS
- 29. pthread并行处理
- 30. 并行处理库
尽管您可以更改事件提升代码以便自己对其进行并行处理。 (你在问这个问题之前试过了吗?) –
两种方式,请参考[this](http://stackoverflow.com/questions/1516119/c-sharp-events-how-to-process-event-in-a-并行) –
你为什么不自己尝试一下?抄写1000次并保存该方法执行的时间。好的问题通过。 – Kimmax