【发布时间】:2014-05-07 02:46:32
【问题描述】:
当菊花链多个修改相同TInput元素的块时,我可以使用ActionBlock<TInput>或TransformBlock<TInput,TInput>,不同之处在于Transform的委托将返回相同的(但修改过的元素)而Action委托不会'不返回任何东西,它只会修改输入元素。
两者都有效,我认为两者在语义上都有意义,但我假设其中只有一种是预期的方式。
如果我不得不猜测,我会说它是 Action,因为当返回相同的元素时,它并不是真正的转换。但是,如果我不得不出于更务实的原因进行猜测,我会说 Transform,因为如果我将这些块以菊花链形式连接起来,Transform 似乎允许我将“已处理”元素直接发布到下一个块,但不确定如何执行与行动。
【问题讨论】:
-
一个想法:你有就地修改元素而不是转换它吗?由于所有正常的不变性好处原因,我希望转换方法更容易诊断。
-
我想我可以通过创建实现或封装原始类的不同“修改”类来稍微“丰富”我的架构。例如,假设我正在修改的元素是
Bimbo类型,并且操作包括分配一个类别。我可以改为创建一个新类“ClassifiedBimbo”,我的 lambda 就像public ClassifiedBimbo ClassifyBimbo(Bimbo bimbo)。这有意义吗? -
是的,这对我来说是个好主意。如果您可以接受不变性,那么根据我的经验,数据管道最终会更易于使用 - 也更清晰。
标签: .net task-parallel-library tpl-dataflow