Скажем, у меня есть параллельная коллекция задач, которые необходимо обработать. Например, возможно, это загрузка данных различным потребителям по типу (Consumer1, Consumer2, Consumer3...Consumer[N]). Базовая задача отправки данных одинакова для каждой задачи, но каждый потребитель может принимать только один источник одновременно.
По сути, я хочу обрабатывать как можно больше параллельно, но с оговоркой, что я могу отправлять только одну задачу каждому потребителю одновременно. Таким образом, если текущее задание для потребителя уже выполняется, мне следует перейти к следующему элементу в коллекции и оставить его до завершения текущего задания для этого потребителя. Коллекцию Concurrent можно также добавить в любое время извне, и если бы у нас были новые типы, нам потребовались бы дополнительные потоки.
Полагаю, мой вопрос сводится к тому, как мне настроить «Взять» из коллекции, чтобы я мог получить только следующую задачу со свойством, которое указывает, что у нее есть Потребитель, у которого еще нет выполняемого задания.
Любые идеи по поводу того, что я могу сделать меня здесь не хватает или я вообще на правильном пути?
Пример: у нас есть очередь посредника с задачами, связанными с банковскими транзакциями.
Поэтому мы могли бы добавить в нашу очередь посредника (скажем, send SummaryData и Send TransactionData используют один и тот же контракт интерфейса для отправки данных)
- SendTransactionData -> Bank1
SendTransactionData -> Банк2 - SendSummaryData -> Арбитр
- SendTransactionData -> Банк1
- SendTransactionData -> Bank3
- SendTransactionData -> Bank1
- SendTransactionData -> Bank2
Прежде чем какой-либо из начальных процессов завершится, кто-то может добавить еще одну группу.
- SendSummaryData -> Арбитр
- SendTransactionData -> Bank1
SendTransactionData -> Bank4
Очевидно, что были бы лучшие способы спроектировать систему для достижения этой цели, но по сути это те спецификации, которые я Я ищу удовлетворения.
Подробнее здесь: https://stackoverflow.com/questions/710 ... t-serially