我有一種情況,我正在運行一些需要幾秒鐘到幾分鐘的任務。我也有可能增加更多的數據,需要添加到已經運行的並行循環中。是否有可能更新Parallel.For正在使用的當前集合,並讓它繼續迭代,直到沒有更多的對象要檢索爲止? 這裏是顯示我的問題的一些示例代碼:我可以更新Parallel.For正在使用的集合嗎?
[Test]
public void DoesParallelForGetNewEntriesInLoop()
{
ConcurrentDictionary<int, string> dict = new ConcurrentDictionary<int, string>();
ConcurrentBag<string> bag = new ConcurrentBag<string>();
int i = 0;
// write to dictionary every 10ms simulating new additions
Timer t = new Timer(callback =>
{
dict.TryAdd(i++, "Value" + i);
}, dict, 0, 10);
// Add initial values
dict.TryAdd(i++, "Value" + i);
dict.TryAdd(i++, "Value" + i);
dict.TryAdd(i++, "Value" + i);
Parallel.For(0, dict.Count, (a, state) =>
{
string val = string.Empty;
if (dict.TryGetValue(a, out val))
{
bag.Add(val + Environment.NewLine);
}
if (i++ == 50)
state.Stop();
Thread.Sleep(5000);
});
foreach (var item in bag)
{
File.AppendAllText("parallelWrite.txt", item);
}
}
當我運行這個結果我得到的是簡單的:
Value2
Value1
Value3
Value4
有沒有做什麼,我想在這裏做一個更好的辦法?
這使得很多的意義,我會試試看,並將其標記爲答案,如果它的工作:) – 2015-02-05 21:29:35
我結束了使用一點點不同的方法,但這有助於得到我在正確的軌道上。 – 2015-03-06 18:18:14