我想知道在输入缓冲区中接收到第一个项目还是在数据块中处理第一个项目时,是否可以订阅一次性通知。我知道我可以在数据块中设置一个标志,但是会产生开销,因为它会运行检查每个新项目上的标志。我的数据块处理数百万项,因此这个标志增加了不必要的开销。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