我在編寫c#中的異步多服務器網絡應用程序時遇到了問題。我有很多工作由線程池處理,這些工作包括寫入網絡套接字。這最終允許多個線程可以同時寫入套接字並解散我輸出消息的情況。我的想法是實現一個隊列系統,每當數據添加到隊列中時,套接字都會寫入隊列。異步隊列管理器
我的問題是,我無法將自己的頭圍繞在這種性質的建築中。我想象有一個隊列對象在數據被添加到隊列時觸發一個事件。然後事件寫入隊列中保存的數據,但這不起作用,因爲如果兩個線程同時到達並同時添加到隊列中,即使隊列被設置爲線程安全,事件仍然會被觸發我會遇到同樣的問題。那麼如果另一個事件正在進行,那麼也許還有一個事件可以阻止一個事件,但是如果第一個事件完成後我該如何繼續該事件,而不是簡單地阻塞某個互斥體或某個事件的線程。如果我不是試圖嚴格遵守我的「無阻塞」體系結構,但這個特殊的應用程序要求我允許線程池線程繼續做它們的事情,這並不會很難。
任何想法?
'new BlockingCollection(new ConcurrentQueue ())''完全等價於'new BlockingCollection ()':) –
porges
2012-03-13 10:08:23
很好理解,但我通常對我的初始值設定項非常詳細。當有人不知道什麼是默認值時,它變得更清晰:)(和「var」有助於不必重複所有內容) – Brunner 2012-03-19 09:29:00
超級有用,Alex。保存了我的培根。 – 2012-04-04 19:33:12