이 동작을 지원하려면 꽤 복잡한 내부 처리가 필요하므로 대부분의 컬렉션에서 지원하지 않습니다 (Concurrent
네임 스페이스에 대해 확실하지 않습니다).
그러나 불변의 컬렉션을 사용하여이 동작을 매우 잘 시뮬레이션 할 수 있습니다. 그들은 을 디자인 변경하여 컬렉션을 수정할 수는 없지만 약간 다른 방식으로 처리 할 수 있습니다. 이러한 종류의 처리는 복잡한 처리 없이도 열거자를 동시에 사용할 수 있습니다 (Concurrent
컬렉션에 구현 됨).
쉽게 그런 컬렉션을 구현할 수있다, 또는 당신이 (비록 .NET 4.0이 아닌 표준 부품) FSharp.Core.dll
에서 FSharpList<T>
를 사용할 수 있습니다
open Microsoft.FSharp.Collections;
// Create immutable list from other collection
var list = ListModule.OfSeq(anyCollection);
// now we can use `GetEnumerable`
var en = list.GetEnumerable();
// To modify the collection, you create a new collection that adds
// element to the front (without actually copying everything)
var added = new FSharpList<int>(42, list);
불변의 컬렉션의 장점은 작업 할 수 있다는 것입니다 원래 복사본에 영향을 미치지 않으면 서 복사본을 만들 수 있으므로 원하는 동작은 "무료"입니다. 자세한 내용은 great series by Eric Lippert입니다.
컬렉션을 읽는 동시에 컬렉션을 수정해야하는 이유를 설명 할 수 있습니까? 당신이 원하는 것을 할 수있는 또 다른 방법이있을 수 있습니다. –