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
        }
示例#2
0
        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
        }