以下のクラスでは、1つのスレッドがIEnumerableオブジェクトを取得し、要素に対して反復処理を開始するとします。反復の途中で、別のスレッドが追加され、Add-methodを介してlibrary_entriesに新しいエントリを追加します。反復で "コレクションが変更されました" - 例外がスローされるのでしょうか?または、反復が完了するまで、ロックによって要素の追加が防止されますか?それともどちらですか?スレッディングとIEnumerable; "コレクションが変更されました" -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の並行コレクションを調べて、それらのうちの1つがあなたがしたいことに役立つかどうかを調べることができます(私はあなたが望むものについてはわかりません)。 – CodesInChaos