正确使用 TplDataFlow TransformBlock

Correct usage of TplDataFlow TransformBlock

我有一个场景,我将不得不转换大量 objects 并将它们分配给一些 parent 容器 objects。

我在这些项目上使用了一个 id 以确定它们属于哪个 parent,所以我决定创建一个字典来组织每个 parent object及其 children.

我的问题是关于 TransformBlock 的正确用法,我是否应该像我在下面的示例代码示例或转换块是否应该只负责转换 object 和查找和分配 parent 的实际工作在链接到转换块的操作块中完成。

var dictionary = new Dictionary<int, List<Item>>
{
    {1,new List<Item>() },
    {2,new List<Item>() },
    {3,new List<Item>() },
    {4,new List<Item>() },
    {5,new List<Item>() },
    {6,new List<Item>() },
    {7,new List<Item>() },
    {8,new List<Item>() },
    {9,new List<Item>() },
    {10,new List<Item>() },
};   

var transformBlock = new TransformBlock<ItemToMap, Item>
    (
        (itemToMap) =>
        {
            var parent = dictionary[itemToMap.ParentId];
            var item = mapToItem(itemToMap);
            parent.Add(item);
            return item;
        }
    );

foreach (var itemToMap in AllItemsToMap)
{
    transformBlock.Post(itemToMap);
}

transformBlock.Complete();

因为您现在正在使用它,所以没有理由使用 TransformBlock。请改用 ActionBlock

关于是否将工作分成两个不同的块,我的回答是,这取决于您的配置。例如,如果您想要不同级别的并行性,您可以将工作分成多个块。

但是,在您的示例中,我根本没有看到使用块的理由。除了向字典中插入项目外,没有其他实际工作要做。