TPL 数据流:创建者启动块

本文关键字:启动 创建者 数据流 TPL | 更新日期: 2023-09-27 18:31:00

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

有什么办法可以做到这一点吗?还是我需要创建自定义块?

TPL 数据流:创建者启动块

我认为最简单的方法是将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;
}