想象一下,在下面的類中,一個線程獲取IEnumerable對象並開始對元素進行迭代。在迭代過程中,另一個線程出現並通過Add-method向library_entries添加一個新條目。 「收集是否會被修改」 - 在迭代中拋出異常?或者,鎖會阻止添加元素直到迭代完成?或者既不?線程和IEnumerable; 「Collection was Modified」-exception
謝謝!
public static class Library
{
private static List<string> library_entries = new List<string>(1000000);
public static void Add(string entry)
{
lock (library_entries)
library_entries.Add(entry);
}
public static IEnumerable<string> GetEntries()
{
return library_entries.Where(entry => !string.IsNullOrEmpty(entry));
}
}
你可以看看.net 4的併發集合來檢查它們中的一個是否對你想要做的事情有用(我不確定你想要什麼)。 – CodesInChaos