【发布时间】:2012-10-26 14:32:30
【问题描述】:
我正在使用第三方库来迭代一些非常大的平面文件,这可能需要几分钟。该库提供了一个枚举器,因此您可以在枚举器提取平面文件中的下一项时产生并处理每个结果。
例如:
IEnumerable<object> GetItems()
{
var cursor = new Cursor;
try
{
cursor.Open();
while (!cursor.EOF)
{
yield return new //object;
cursor.MoveNext();
}
}
finally
{
if (cursor.IsOpen)
{
cursor.Close();
}
}
}
我想要实现的是拥有相同 Enumerable 的两个消费者,因此我不必两次提取信息,因此每个消费者仍然可以在每个项目到达时对其进行处理,而无需一直等待马上到达。
IEnumerable<object> items = GetItems();
new Thread(SaveToDateBase(items)).Start();
new Thread(SaveSomewhereElse(items)).Start();
我想我想要达到的目标是
“如果消费者要求的项目已经被提取,则放弃它,否则移动下一步并等待”但我意识到两个线程之间可能存在 MoveNext() 冲突。
如果没有任何关于如何实现的想法,这样的事情是否已经存在?
谢谢
【问题讨论】:
标签: c# ienumerable ienumerator