Я относительно новичок в асинхронной обработке и экспериментировании с потоком данных TPL. Мой сценарий: у меня есть блок, который постоянно снабжается входом, асинхронно выполняет функцию на входе и возвращает результаты. (Затем результаты передаются в другой блок, который сохраняется в базе данных.) Функция может быть завершена в течение миллисекунд или может занять до 10 секунд. Блок настроен для обработки с «неограниченным» параллелизмом. Заказ результатов не имеет значения.Есть ли блок потока данных, такой как TransformBlock <TIn, TOut>, который позволяет размножать элементы в последовательности?
Я начал с использования TransformBlock
, но (поскольку он поддерживает последовательность элементов), один медленный элемент приведет к тому, что за ним будут накапливаться более быстрые предметы. В этой конкретной ситуации не только приемлемо, чтобы результаты распространялись вне последовательности, но весьма желательны. Это позволяет получать результаты с регулярной скоростью, а не в гигантских волнах.
Я искал несколько раз, ища реализацию блока потока данных, который распространяет элементы, как только они будут завершены, но мне еще предстоит найти что-либо, что соответствует этому описанию. Я сдался и создал свой собственный «воздуховодом» вместе ActionBlock
и BufferBlock
. Кажется, эта работа, но я обеспокоен тем, что (в моем отсутствии опыта) я сделал что-то не так, и это укусит меня в конце. Существует ли существующая реализация этой модели?
Записи ActionBlock в буферном блоке? – i3arnon
@ I3arnon Это правильно. –