1
我一直在使用任務和BlockingCollections,他們做得很好。但據我所知,Take()方法刪除隊列中的對象。但是如果你想要2個任務同時訪問相同的值呢?C# - BlockingCollection:我們可以有2個線程Take()相同的值嗎?
假設我正在讀取文件,並通過blockingCollection.Add()將每行發送到2個任務,但我希望這兩個任務都按相同的順序獲取相同的行。 (每個任務都會對同一行做不同的事情)
我該怎麼做呢? BlockingCollection可以做到這一點嗎?或者我使用事件來傳遞值?如果是這樣,請解釋如何在另一個任務/線程中創建任務/線程的事件。
[編輯]如果我這樣做:
while (!lineCollection.IsCompleted)
{
Line line = lineCollection.Take();
//do my processing
//then I add the original line back to the collection
lineCollection.Add(line);
//and use a "wait one" to wait for T2 to Take this line aswell
//Then continue my while loop
}
不是很優雅......這也不能保證同步。
這絕對是一個選擇,但是,如果你正在處理非常大的文件,並且你不能在內存中保存重複內容,該怎麼辦? – Spectraljump 2010-12-05 20:18:29