На практике они значат одно и то же. Однако предпочтительно использовать термин deferred .
Ленивый означает «не выполняйте работу, пока вам не придется».
Отложено означает "не вычислять результат, пока вызывающий абонент фактически не использует его."
На практике, когда вызывающий абонент решает использовать результат оценки (т. Е. Начать итерацию по IEnumerable<T>
), это как раз та точка, в которой должна быть выполнена «работа» (например, выдача запроса база данных).
Термин отложенный является более конкретным / описательным в отношении того, что на самом деле происходит. Когда я говорю, что я ленивый , это означает, что я избегаю ненужной работы ; неоднозначно, что на самом деле означает . Однако когда я говорю, что выполнение / оценка отложено , это, по сути, означает, что я вообще не даю вам реальный результат, а скорее билет, который вы можете использовать, чтобы запросить результат, Я откладываю фактически ухожу и получаю такой результат, пока вы не потребуете его.
Пожалуйста, используйте термин отложено при обсуждении вопроса, поскольку он относится к C #. Lazy - более туманная версия.
Примечание: Ленивый выполнение / оценка отличается от ленивого загрузка или выборка в контексте последовательности . Ленивая загрузка и Готовая загрузка - это термины, используемые для описания того, как загружаются элементы последовательности. Когда последовательность загружается лениво , это означает, что все, что генерирует последовательность, выполняет достаточно работы для загрузки одного элемента за один раз . Когда последовательность загружена с нетерпением , последовательность вся загружается сразу и сохраняется в локальном буфере. Различные требования к использованию требуют разных моделей загрузки.