В System.Interactive.dll (v1.0.2521.0) из Reactive Extensions EnumerableEx
имеет метод Memoize
и метод MemoizeAll
. Документация API для них одинакова:
Создает перечислимое, которое перечисляет исходное перечисляемое только один раз и кэширует его результаты.
Однако эти методы явно не идентичны. Если я использую Memoize
, мой перечислитель имеет значения в первый раз, когда я его перечисляю, и кажется, что он пуст во второй раз. Если я использую MemoizeAll
, то получаю поведение, которое можно ожидать от описания любого метода - я могу перечислять результат столько раз, сколько я хочу, и каждый раз получать одни и те же результаты, но источник перечисляется только один раз.
Может кто-нибудь сказать мне, в чем заключается различие между этими методами? Каков вариант использования для Memoize
? Это кажется довольно бесполезным методом с действительно запутанной документацией.