假设您有一个返回惰性枚举对象的函数:
struct AnimalCount
{
int Chickens;
int Goats;
}
IEnumerable<AnimalCount> FarmsInEachPen()
{
....
yield new AnimalCount(x, y);
....
}
此外,您还有两个函数可以消耗两个分离的 IEnumerable
,例如:
ConsumeChicken(IEnumerable<int>);
ConsumeGoat(IEnumerable<int>);
如何在不将FarmsInEachPen()
转换为列表(因为它可能有数十亿条记录)且没有多线程的情况下调用ConsumeChicken
和ConsumeGoat
。
基本上:
ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens));
ConsumeGoats(FarmsInEachPen().Select(x => x.Goats));
但是不要强制进行双重枚举。
我可以使用多线程解决它,但对于每个列表,使用一个缓冲区队列会使它变得不必要地复杂。
因此,我正在寻找一种将AnimalCount
枚举器分成两个int
枚举器的方法,而不必完全评估AnimalCount
。同时运行ConsumeGoat
和ConsumeChicken
没有问题。
我感觉解决方案就在我的掌握之外,但我还没有到达那里。我考虑了一个帮助函数,返回传入ConsumeChicken
的IEnumerable
,每次使用迭代器时,它都会内部调用ConsumeGoat
,从而以锁步方式执行这两个函数。当然,我不想调用ConsumeGoat
超过一次..
AnimalCount
跳到了IEnumerable<AnimalCounts>
再到了IEnumerable<int>
(我猜的?甚至无法确定你的意图...)。目前这个问题被标记为不是一个真正的问题。 - Blindy