Я пытаюсь понять Поток данных в C #, поэтому я написал скрипку здесь , и мне любопытно, почему мои блоки действий не выполняются в моем примере.
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks.Dataflow;
public class Program
{
public static void Main(string[] args)
{
var numberOfProducers = 1;
var numberOfConsumers = 10;
var allProducers = Enumerable.Range(0, numberOfProducers).Select(x => new BroadcastBlock<double>(d =>
{
return d;
},
new DataflowBlockOptions()
{
BoundedCapacity = 500
}));
var allConsumers = Enumerable.Range(0, numberOfConsumers).Select(x => new ActionBlock<double>(d =>
{
Console.WriteLine(String.Format("Consuming {0} on Thread ID: {1}", d, Thread.CurrentThread.ManagedThreadId));
},
new ExecutionDataflowBlockOptions()
{
BoundedCapacity = 500
}));
foreach (var producer in allProducers)
{
foreach (var consumer in allConsumers)
{
producer.LinkTo(consumer);
}
}
Parallel.For(0, 20, (i) =>
{
foreach (var producer in allProducers)
{
Console.WriteLine(String.Format("Posting {0} on Thread ID: {1}", i, Thread.CurrentThread.ManagedThreadId));
producer.Post(i);
}
}
);
}
}
Пример вывода из этой программы следующий:
Публикация 0 в ID темы: 18
Публикация 10 в ID темы: 16
Публикация 1 в идентификаторе темы: 17
Публикация 11 в идентификаторе темы: 19
Публикация 2 в идентификаторе темы: 18
Публикация 4 в идентификаторе темы: 17
Проводка 5 в идентификаторе темы: 17
Проводка 6 в идентификаторе темы: 17
Проводка 3 в идентификаторе темы: 18
Проводка 12 в идентификаторе темы: 18
Проводка 7 в идентификаторе темы: 17
Проводка 16 в идентификаторе темы: 19
Проводка 8 в идентификаторе темы: 17
Проводка 17 в идентификаторе темы: 19
Проводка 9 в идентификаторе темы: 17
Проводка 18 в идентификаторе темы: 19
Проводка 19 в идентификаторе темы: 19
Проводка 13 в идентификаторе темы: 18
Публикация 14 на ID темы: 18
Публикация 15 в идентификаторе потока: 18
Я ожидаю, что несколько строк будут смешаны при отображении блоков действий, использующих данные, публикуемые в блоке широковещания.