internal static void Memoize() { IEnumerable <int> source1 = TracedRange(0, 5); int[] concat1 = source1.Concat(source1).ToArray(); // 0 1 2 3 4 0 1 2 3 4. // Trace: 0 1 2 3 4 0 1 2 3 4 IBuffer <int> source2 = TracedRange(0, 5).Share(); int[] concat2 = source2.Concat(source2).ToArray(); // 0 1 2 3 4. // Trace: 0 1 2 3 4 IBuffer <int> source3 = TracedRange(0, 5).Publish(); int[] concat3 = source2.Concat(source2).ToArray(); // 0 1 2 3 4. // Trace: 0 1 2 3 4 IBuffer <int> source4 = TracedRange(0, 5).Memoize(); int[] concat4 = source2.Concat(source2).ToArray(); // 0 1 2 3 4 0 1 2 3 4. // Trace: 0 1 2 3 4 }
internal static void ConcatMemoized() { IEnumerable <int> source1 = Enumerable.Range(0, 5); source1.Concat(source1).WriteLines(); // 0 1 2 3 4 0 1 2 3 4 using (IBuffer <int> source2 = Enumerable.Range(0, 5).Memoize()) { source2.Concat(source2).WriteLines(); // 0 1 2 3 4 0 1 2 3 4 } // Equivalent to: IEnumerable <int> source3 = Enumerable.Range(0, 5); source3.Memoize(source => source.Concat(source)).WriteLines(); // 0 1 2 3 4 0 1 2 3 4 }