Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# tpl数据流:生产者开始锁定_C#_.net_Task Parallel Library_Tpl Dataflow - Fatal编程技术网

C# tpl数据流:生产者开始锁定

C# tpl数据流:生产者开始锁定,c#,.net,task-parallel-library,tpl-dataflow,C#,.net,Task Parallel Library,Tpl Dataflow,我试图建立一个管道,其中第一个区块将是生产者区块。 它进入一个Enum对象,并据此产生大量数据。该数据到达时应自动发送到管道的以下步骤 有没有办法做到这一点?或者我需要创建一个customblock吗?我认为最简单的方法是将缓冲块与实际生成项目的任务结合使用。比如: public ISourceBlock<Foo> CreateProducer() { var block = new BufferBlock<Foo>(); // add options if ne

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


有没有办法做到这一点?或者我需要创建一个customblock吗?

我认为最简单的方法是将
缓冲块
与实际生成项目的
任务结合使用。比如:

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;
}
公共ISourceBlock CreateProducer() { var block=new BufferBlock();//必要时添加选项 Task.Run(()=> { 尝试 { 尽管(不管怎样) { Foo-Foo=…; block.Post(foo);//如果块是有界的,则等待SendAsync() } } 捕获(例外情况除外) { ((IDataflowBlock)块)。故障(ex); } }); 返回块; }
我认为最简单的方法是将
缓冲块
与实际生成项目的
任务
结合使用。比如:

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;
}
公共ISourceBlock CreateProducer() { var block=new BufferBlock();//必要时添加选项 Task.Run(()=> { 尝试 { 尽管(不管怎样) { Foo-Foo=…; block.Post(foo);//如果块是有界的,则等待SendAsync() } } 捕获(例外情况除外) { ((IDataflowBlock)块)。故障(ex); } }); 返回块; }