Недостаточно информации, чтобы предложить путь, по которому вы должны идти, но, определенно, вы могли бы, и это будет библиотека «Параллельная задача» и Task<T>
.
Море веселья. Однако, не сходите с ума от этого, вы можете легко закончить с тем, что ваше многопоточное усилие будет намного медленнее, чем синхронный пакет.
Если, скажем, T, был подключен к БД, бросить в него запрос, вернуть заголовок данных и сказать, что в пакете было 8 запросов.
Вы устанавливаете задачи с 0 по 7, запускаете таймер для тайм-аута, отключаете их все.
Когда они завершатся, вы сохраните читатель и установите свой флаг на основе идентификатора задачи. Когда он достигнет 255, вызовет событие OnBatchComplete, скопируйте ваши читатели и передайте их в задачу объединения. Тайм-аут уходит первым, действуйте соответственно. Если в задаче есть ошибка, пусть она вернет какую-то подходящую причину, сообщит вызывающей стороне, возможно, уничтожит все еще выполняющиеся запросы.
Не знаю, как работает ваш процесс объединения, но если бы его можно было организовать, скажем, как только запросы 1 и 3 были бы готовы, вы могли бы выполнить промежуточный процесс, или, если он в каком-то логическом порядке, как только все запросы готов к чтению, не могли бы вы начать читать простые классы, а затем бросить каждый из них в задачу объединения ...
Это нечестно, я не получаю такие забавные вещи, как это ...