У меня проблема с подключением BroadcastBlock(s)
к BatchBlocks
. Сценарий таков, что источники BroadcastBlocks
, а получатели BatchBlocks
.
В приведенном ниже упрощенном коде выполняется только один из дополнительных блоков действий. Я даже установил размер партии для каждого BatchBlock
равным 1, чтобы проиллюстрировать проблему.
Установка для Greedy значения «true» приведет к выполнению 2 ActionBlocks
, но это не то, чего я хочу, поскольку это приведет к продолжению BatchBlock
, даже если оно еще не завершено. Есть идеи?
class Program
{
static void Main(string[] args)
{
// My possible sources are BroadcastBlocks. Could be more
var source1 = new BroadcastBlock<int>(z => z);
// batch 1
// can be many potential sources, one for now
// I want all sources to arrive first before proceeding
var batch1 = new BatchBlock<int>(1, new GroupingDataflowBlockOptions() { Greedy = false });
var batch1Action = new ActionBlock<int[]>(arr =>
{
// this does not run sometimes
Console.WriteLine("Received from batch 1 block!");
foreach (var item in arr)
{
Console.WriteLine("Received {0}", item);
}
});
batch1.LinkTo(batch1Action, new DataflowLinkOptions() { PropagateCompletion = true });
// batch 2
// can be many potential sources, one for now
// I want all sources to arrive first before proceeding
var batch2 = new BatchBlock<int>(1, new GroupingDataflowBlockOptions() { Greedy = false });
var batch2Action = new ActionBlock<int[]>(arr =>
{
// this does not run sometimes
Console.WriteLine("Received from batch 2 block!");
foreach (var item in arr)
{
Console.WriteLine("Received {0}", item);
}
});
batch2.LinkTo(batch2Action, new DataflowLinkOptions() { PropagateCompletion = true });
// connect source(s)
source1.LinkTo(batch1, new DataflowLinkOptions() { PropagateCompletion = true });
source1.LinkTo(batch2, new DataflowLinkOptions() { PropagateCompletion = true });
// fire
source1.SendAsync(3);
Task.WaitAll(new Task[] { batch1Action.Completion, batch2Action.Completion }); ;
Console.ReadLine();
}
}
Greedy
наtrue
является правильным решением. Это не приведет к созданию меньших партий, если вы об этом беспокоитесь. - person svick   schedule 30.08.2015