什么是BatchBlock的相反块

时间:2015-09-06 09:29:33

标签: c# .net task-parallel-library tpl-dataflow

鉴于

电子邮件ID列表

我正在做什么

使用BatchBlock组ID并为每个块调用Transformblock,简化的transformblock如下所示:

var readBatch = new TransformBlock<List<int>, IEnumerable<Email>>(idList =>
{
    List<Email> mails = new List<Email>();
    foreach(var id in idList)
    {
        mails.Add(new Email(id));
    }
    return mails;
});

现在我的下一个TransformBlock定义如下

TransformBlock<Email,EMail> filterStep;

我搜索的内容: 所以我需要一个块,它允许我将一个集合作为源并返回N-Elements作为结果。因此,在这种情况下,一个块接收IEnumerable<Email>并在枚举中返回Email个foreach条目。

所以我搜索的是BatchBlock的反面但我无法找到它。我忽略了什么吗?

2 个答案:

答案 0 :(得分:6)

您需要的阻止是TransformManyBlock。您从块的func返回IEnumerable<Email>,它会自动单独传输每个项目:

var transformManyBlock = new TransformManyBlock<IEnumerable<Email>, Email>(emails => emails);

答案 1 :(得分:2)

TransformManyBlock可能就是你要找的东西。它需要TInput并返回IEnumerable(1:n)。