tpl dataflow:producer startblock

时间:2013-09-12 12:32:57

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

我试图建立一个管道,第一个块将是生产者块。 它进入一个Enum对象,据此产生大量数据。此数据应在到达时自动发送到管道的以下步骤。

有没有办法做到这一点?或者我是否需要创建自定义块?

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用BufferBlock结合实际生成项目的Task。类似的东西:

public ISourceBlock<Foo> CreateProducer()
{
    var block = new BufferBlock<Foo>(); // add options if necessary

    Task.Run(() =>
    {
        try
        {
            while (whatever)
            {
                Foo foo = …;
                block.Post(foo); // or await SendAsync() if block is bounded
            }
        }
        catch (Exception ex)
        {
            ((IDataflowBlock)block).Fault(ex);
        }
    });

    return block;
}