创建将单个输入转换为多个输出的TPL数据流TransformBlock

问题描述 投票:0回答:1

我正在基于数据流模式开发一个项目。为此,我使用来自.NET的TPL Dataflow库。

我是最近才了解这个图书馆的,所以我仍然是一个知识不多的菜鸟。我正在尝试建立几个块的管道。第一块从其输入堆栈上的配置接口列表开始。基于每个配置对象,此块创建一个对象,该对象将从文件中加载URL列表。加载URL之后,我想将每个URL分别放置在此块的输出堆栈上。

我的问题是,我似乎找不到找到让转换函数接收输入对象并返回将单独放置在堆栈中的输出列表的方法。我在这里想念什么吗?

private async Task<Uri> LoadUrl(IUrlLoaderSettings loaderSettings)
{
    IUrlLoader newLoader = CreateSeedLoader(loaderSettings);
    List<Uri> urls = await newLoader.LoadAsync().ConfigureAwait(false);

    foreach (Uri url in urls)
    {
        // each url loaded should be posted on output stack.
    }

        return null;
}

// Url Loader block.
TransformBlock<IUrlLoaderSettings, Uri> loaderBlock = new TransformBlock<IUrlLoaderSettings, Uri>(loaderSettings => LoadUrl(loaderSettings));

基本上,我想要一个具有配置对象的输入堆栈,每个对象都生成一个输出列表。我不希望该列表直接放在输出堆栈中,因为我希望下一个块单独处理每个URL,而不是作为一个块。

提前感谢!

c# .net web-scraping tpl-dataflow
1个回答
0
投票

您可能需要TransformManyBlock。此块为其接收的每个输入调用一个TransformManyBlock,并分别传播每个Func<TInput, IEnumerable<TOutput>>的生成项。该块实现IEnumerable<TOutput>接口。

© www.soinside.com 2019 - 2024. All rights reserved.