У меня есть процесс, для которого мне нужно улучшить производительность.Будет ли это хорошим кандидатом на реактивные расширения?
Этот процесс запускает запрос в базе данных.
Для каждой записи есть две задачи, которые, возможно, необходимо выполнить на основе данных в записи.
Для одной из двух задач, возможно, потребуется дополнительная информация из веб-службы, тогда обработка будет точно такой же.
Другая задача всегда одна и та же.
Как только обе задачи выполнены, запись должна быть обновлена в базе данных.
Я думаю, что Rx может позволить мне параллельно запускать процессы, что улучшит производительность. Кроме того, я хотел бы иметь возможность отслеживать ход выполнения партии.
В настоящее время у меня есть следующий код. Я хотел бы знать, является ли это подходящим подходом для этой задачи.
IObservable<Record> records = GetDataFromDb().ToObservable();
var recsOfType1 = records.Where(r => r.IsOfType1).Do(FetchAdditionalInfoIntoRecord);
var recsOfType2 = records.Where(r => r.IsOfType2);
var allCompleteRecords = recsOfType1.Merge(recsOfType2);
allCompleteRecords.Do(Task1).Do(Task2).Do(UpdateInDB);
Мне нужно будет добавить дополнительную обработку ошибок и мониторинг процесса. Я не уверен на 100%, как бы я это сделал.
Любые идеи/комментарии/критики приветствуются.
Thanks
№ RX предназначен для «управления» потоками событий. Поэтому обрабатывать данные, которые выталкиваются. Запросы БД касаются вытягивания данных. Вместо этого я предлагаю рассмотреть задачи. –
Rx перебор. Задача должна помочь здесь – Tilak
Я согласен со всеми комментариями, что это не проблема Rx. Но также хотел бы добавить «не использовать' Do', как это ». Если у вас есть наблюдаемая последовательность данных, используйте «Выбрать», чтобы внести изменения в данные, а _pipe_ - к следующему оператору. Не используйте для 'Do', который должен почти исключительно быть отнесен к регистрации и отладке. –