我正在使用第三方庫來迭代一些可能需要幾分鐘的非常大的平面文件。該庫提供了一個枚舉器,因此您可以生成每個結果並進行處理,而枚舉器則提取平面文件中的下一個項目。多個線程使用良率訪問IEnumerable
如:
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();
}
}
}
我想實現是有兩位消費者同樣可枚舉的,所以我不必提取信息的兩倍,因此每個消費者仍然可以處理每一個項目,因爲它無需等到所有時間到達一次。
IEnumerable<object> items = GetItems();
new Thread(SaveToDateBase(items)).Start();
new Thread(SaveSomewhereElse(items)).Start();
我猜我想實現的是類似
「如果消費者要求的是已經萃取,然後產生它的項目,否則未來移動和等待」,但我意識到可能MoveNext()在兩個線程之間發生衝突。
像這樣的事情已經退出,如果沒有任何想法會如何實現?
感謝
哈哈...好ANS .... – Anirudha
如果事情是不明確的,請詢問 – sll
上downvote任何闡述? – sll