例如,我有一個會觸發一個事件的類,以及該事件的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