Мне нравится спрашивать, как лучше всего спроектировать наиболее оптимальную архитектуру с использованием TPL Dataflow. Я еще не написал кода, поэтому я не могу опубликовать образец кода. Я тоже не ищу код (если не вызван добровольно), но помощь в дизайне будет очень благодарна:
Требования следующие:
У меня есть 3 основных блока данных, которые определенным образом зависят друг от друга. Datablock1 - производитель, который создает объекты типа Foo1. Предполагается, что Datablock2 подписывается на объекты Foo1 (из Datablock1) и потенциально (не на каждый и каждый Foo1, в зависимости от конкретной функции) создавать объекты Foo2, которые он сохраняет в очереди вывода для использования другими блоками данных. Datablock3 также потребляет объекты Foo1 (из Datablock1) и потенциально создает объекты Foo3, которые потребляет Datablock2 и преобразует в объекты Foo2.
Итак, вот блоки данных и то, что каждый из них производит и потребляет:
- Datablock1: производит (Foo1), потребляет (ничего)
- Datablock2: производит (Foo2), потребляет (Foo1, Foo3)
- Datablock3: производит (Foo3), потребляет (Foo1)
Дополнительным требованием является то, что один и тот же Foo1 обрабатывается примерно в одно и то же время в Datablock2 и Datablock3. Было бы нормально, если бы объекты Foo1 сначала использовались Datablock2, а затем, как только Datablock2 выполнил свою работу, те же самые объекты Foo1 были отправлены в Datablock3, чтобы он выполнял свою работу. Объекты Foo2 из Datablock2 могут быть результатом операций с объектами Foo1 или объектами Foo3.
Я надеюсь, что в этом есть смысл, я буду рад объяснить больше, если это все еще неясно.
Моей первой идеей было создать блоки потока данных TPL для каждого из трех блоков данных и заставить их обрабатывать входящие потоки различных типов объектов. Другая идея - разделить блоки данных и сделать так, чтобы каждый блок данных обрабатывал потоки только одного типа объекта. Что вы порекомендуете или есть еще лучшее решение, которое может сработать?
Свик уже помог с Datablock1, и он уже работает, я просто застрял в том, как преобразовать мою текущую среду (как описано выше) в поток данных TPL.
Мы очень ценим любые идеи или указатели.
Foo1
иFoo3
общий базовый класс? Если нет, то почему блок 2 может обрабатывать и то, и другое? - person svick   schedule 28.06.2012