IEnumerator <TItem> IEnumerable <TItem> .GetEnumerator() { Initialize(); using (var itr = Ids.GetEnumerator()) { while (itr.MoveNext()) { var id = itr.Current; // TODO: hit cache diectly? (cache hit is not async) yield return(Session.Get <TItem>(id).GetAwaiter().GetResult()); } } }