我正在使用一个第三方库,它会迭代一些非常大的平面文件,这可能需要很长时间。该库提供了一个枚举器,因此您可以产生每个结果并在处理其余枚举器时处理它,然后枚举器会提取平面文件中的下一个项目。
例如:
我想我试图实现的是类似于“如果消费者要求的项目已经被提取,则产出它,否则继续移动并等待”,但我意识到两个线程之间可能会发生 MoveNext() 冲突。
如果不存在类似于此的内容,则有何想法可以实现?
谢谢。
例如:
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() 冲突。
如果不存在类似于此的内容,则有何想法可以实现?
谢谢。