我想知道在輸入緩衝區中接收到第一個項目還是在數據塊中處理第一個項目時,是否可以訂閱一次性通知。我知道我可以在數據塊中設置一個標誌,但是會產生開銷,因爲它會運行檢查每個新項目上的標誌。我的數據塊處理數百萬項,因此這個標誌增加了不必要的開銷。TPL數據流,數據塊收到第一個項目時的通知
有沒有更好的方法來通知第一個來件物品?
我想知道在輸入緩衝區中接收到第一個項目還是在數據塊中處理第一個項目時,是否可以訂閱一次性通知。我知道我可以在數據塊中設置一個標誌,但是會產生開銷,因爲它會運行檢查每個新項目上的標誌。我的數據塊處理數百萬項,因此這個標誌增加了不必要的開銷。TPL數據流,數據塊收到第一個項目時的通知
有沒有更好的方法來通知第一個來件物品?
(我知道這11個月太晚了......但我希望有人能告訴我,爲什麼這不是一個好主意回答。)
你有一個特定塊X其中你想知道它什麼時候收到第一條消息。它有一個上游塊。在上游塊和塊X之間插入一個TransformBlock,將其從上游塊與MaxMessages = 1鏈接起來,以便在獲得第一條消息時立即取消鏈接。這也阻止了上游區塊。插入的TransformBlock的Func在其代理中做了3件事:
換句話說...插入塊接受和傳遞的第一個數據項,並拼接出的數據流中。
也許將輸入緩衝區連接到'BroadcastBlock',然後它將鏈接到您的主數據流和['WriteOnceBlock'](http://msdn.microsoft.com/zh-cn/library/hh194820.aspx) ? 'WriteOnceBlock'只會被寫入一次(第一項)... –
2013-04-25 13:09:47
你真的說檢查單個'bool'是不必要的開銷嗎?我不信。你有沒有試過測量這個? – svick 2013-04-25 14:04:31
嗯,絕對是一個整潔的想法,使用WriteOnceBlock。無論如何,我都使用廣播塊,這樣就可以工作。我想我不必處理隨後被拒絕的消息,因爲項目是通過廣播塊流式傳輸的,對嗎? – 2013-04-25 14:05:00