8得票2回答
使用TPL Dataflow封装以动作块结束的管道。

TPL Dataflow 提供了一个非常实用的功能: public static IPropagatorBlock<TInput, TOutput> Encapsulate<TInput, TOutput>( ITargetBlock<TInput&gt...

7得票2回答
当消费者不堪重负时,如何让快速生产者暂停?

我在我的应用程序中使用TPL Dataflow实现了生产者/消费者模式。我有一个大的数据流网格,其中约有40个块。该网格有两个主要的功能部分:生产者部分和消费者部分。当消费者处理一些指定数量的工作项时,生产者应继续为消费者提供大量的工作。否则,应用程序会消耗大量内存/CPU并且行为不可持续。我...

7得票2回答
ActionBlock<T> vs Task.WhenAll

我希望知道执行多个异步方法的推荐方式是什么? 在System.Threading.Tasks.Dataflow中,我们可以指定最大并行度,但对于Task.WhenAll来说,无界限可能是默认值吗? 这样做: var tasks = new List&lt;Task&gt;(); fore...

7得票1回答
等待 ActionBlock<T> - TPL 数据流

我正在使用TPL DataFlow和ActionBlock来创建并行性。使用TPL DataFlow的理由是它支持异步,但我无法使其正常工作。 var ab = new ActionBlock&lt;Group&gt;(async group =&gt; { try { ...

7得票1回答
保证传递的Dataflow BroadcastBlock替代方案

我需要一个类似于广播块的对象,但具有保证交付的功能。因此,我使用了这个问题的答案。但我并不完全清楚这里的执行流程。我有一个控制台应用程序。以下是我的代码: static void Main(string[] args) { ExecutionDataflowBlockOptions ...

7得票1回答
缓冲块(BufferBlock)和动作块(ActionBlock)使用有界容量(BoundedCapacity)时不会使用最大DOP。

I have this code: var data = new BufferBlock&lt;int&gt;(new DataflowBlockOptions { BoundedCapacity = 1 }); var action = new ActionBlock&lt;int&gt...

7得票3回答
使用TPL Dataflow,我可以取消所有发布然后添加一个吗?

使用TPL Dataflow库,我希望能够像这样做: myActionBlock.Post(newValue, cancelAllPreviousPosts: true); 看起来ActionBlock上的取消令牌会取消整个操作;如果我设置了那个ActionBlock,我将不得不创建一...