C# tpl数据流:生产者开始锁定
我试图建立一个管道,其中第一个区块将是生产者区块。 它进入一个Enum对象,并据此产生大量数据。该数据到达时应自动发送到管道的以下步骤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
有没有办法做到这一点?或者我需要创建一个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);
}
});
返回块;
}