У меня есть веб-сервис, который возвращает сложную структуру данных, представляющую результаты интенсивного процесса.Чтобы сделать службу отзывчивой, процесс запускается в асинхронной задаче.
При первом вызове службы возвращается пустая структура данных и запускается задача.Последующие сервисные вызовы возвращают кэшированные данные до тех пор, пока Задача не будет выполнена.Когда закончите, мне нужно определить, действительно ли результаты изменились.Если это так, я обновляю свойство, которое указывает дату / время обновления результатов, и сбрасываю кэшированные данные, чтобы новая структура возвращалась службой.В какой-то момент в будущем, по ряду причин, задача будет перезапущена, и логика повторяется.
Я ищу наиболее эффективный способ определить, изменились ли результаты из «кэшированных» данных,Простейшим было бы реализовать Equals для каждого объекта в структуре с равенством родителей, основанным на равенстве их детей и т. Д., Поэтому вызов Equals для корневых объектов даст желаемый результат, но это требует сканирования всей структуры, и я не уверенэто лучший подход.
Я также подумал о том, чтобы начать с копии оригинала и использовать флаги IsDirty, чтобы указать, что объект в структуре изменился, но беспокоился о том, что операция копирования может свести на нет любые преимущества выполнения..
Какой подход вы бы использовали (и почему)?