Большое спасибо за этот ответ, он подробный и понятный, и вы даже сослались на все варианты, которые я упомянул, включая ForEachAsync! +100 :)

я есть требование сделать масштабируемый процесс. Процесс имеет в основном операции ввода-вывода с некоторыми незначительными операциями с процессором (в основном десериализацией строк). Процесс запрашивает у базы данных список URL-адресов, затем извлекает данные из этих URL-адресов, десерилизует загруженные данные в объекты, затем сохраняет некоторые данные в динамику crm, а также в другую базу данных. После этого мне нужно обновить первую базу данных, URL-адреса которой были обработаны. Частью требования является настройка степени параллелизма.

Изначально я думал реализовать это с помощью последовательности задач с помощью await и ограничить параллелизм с помощью семафора - довольно просто. Затем я прочитал несколько постов и ответов здесь @Stephen Cleary, который рекомендует использовать TPL Dataflow, и я подумал, что это может быть хорошим кандидатом. Однако я хочу убедиться, что я «усложняю» код, используя Dataflow для достойного дела. Я также получил предложение использоватьМетод расширения ForEachAsync который также прост в использовании, однако я не уверен, не вызовет ли он перерасход памяти из-за способа, которым он разбивает коллекцию.

Является ли TPL Dataflow хорошим вариантом для такого сценария? Чем он лучше, чем семафор или метод ForEachAsync, - какие преимущества я получу, если я реализую его через TPL DataFlow по сравнению с другими опциями (Semaphore / ForEachASync)?

Ответы на вопрос(1)

Ваш ответ на вопрос