我運行接收不同類型的進程外消息的算法。傳入的消息實際上是字節數組,並且每個字節數組都預先通過指示消息類型的字節數組標誌來標識。我想了解是否可以設置處理傳入字節數組的IPropagator<byte[], byte[]>
,解釋字節數組標誌,然後將字節數組傳送到特定的相應鏈接動作塊。TPL Dataflow消息類型分配模式可能嗎?
例如,假設我有2種不同的消息類型,並且我有2個不同的相應ActionBlocks,它們只應接收與他們應該接收的預期消息類型相匹配的消息。我相信如果我只是將IPropagatorBlock連接到兩個ActionBlocks,這兩個ActionBlocks都會收到相同的消息?我怎樣才能正確地分配每個消息,這取決於它的標誌(不要擔心標誌,標識是微不足道的,假設我知道在任何時候ActionBlock IPropgatorBlock想要流式傳輸消息)?我正在努力正確設置數據流結構。我希望能夠將數據塊直接鏈接到對方,而不必Post()。那可能嗎?
在這方面的任何幫助非常感謝。
我會自己測試它,但是你的預感使用謂詞/過濾器的方法與在變換塊中手動分配的方式相比有多快,然後根據標記的內容簡單發佈到Actionblocks。 (顯然不需要一個轉換塊,但是需要一個動作塊來發布到其他動作塊,顯然不是最漂亮的方式,但是你認爲它會比使用謂詞更快還是更慢? – 2012-07-20 15:00:08
我認爲使用謂詞會有非常小的性能損失。你有很多的目標,然後線性搜索正確的目標可能是一個問題,但這似乎並不是你的情況。 – svick 2012-07-20 15:12:11
我試過了:圓滑的解決方案,速度非常快,非常感謝。因爲我有使用ZeroMQ作爲消息傳遞系統的傳入消息,或者只有一個傳入的套接字,並將不同的消息類型分配給其各自的動作塊進行處理,或者爲每個消息類型設置一個套接字,並且必須編寫大量編寫事件處理程序的代碼並將事件轉發給另一個類。我喜歡嘗試這種方法,因爲我想同時處理這些方法。 – 2012-07-20 15:26:50