title: System.Interactive: Difference between Memoize() and MemoizeAll()?
body: <p>In System.Interactive.dll (v1.0.2521.0) from Reactive Extensions, <code>EnumerableEx</code> has both a <code>Memoize</code> method and a <code>MemoizeAll</code> method. The API documentation is identical for both of them:</p>
  
  <blockquote>
    <p>Creates an enumerable that enumerates the original enumerable only once and caches its results. </p>
  </blockquote>
  
  <p>However, these methods are clearly not identical. If I use <code>Memoize</code>, my enumerable has values the first time I enumerate it, and seems to be empty the second time. If I use <code>MemoizeAll</code> then I get the behavior I would expect from the description of either method - I can enumerate the result as many times as I want and get the same results each time, but the source is only enumerated once.</p>
  
  <p>Can anyone tell me what the intended difference between these methods is? What is the use-case for <code>Memoize</code>? It seems like a fairly useless method with really confusing documentation.</p>