사전을 백업 저장소로 사용하는 스레드로부터 안전한 컬렉션에서 작업하고 있습니다. 다음 작업을 수행 할 수있는 C#에서 잠금 기능을 사용하여 스레드 안전성 열거를 구현할 수 있습니까?
:private IEnumerable<KeyValuePair<K, V>> Enumerate() {
if (_synchronize) {
lock (_locker) {
foreach (var entry in _dict)
yield return entry;
}
} else {
foreach (var entry in _dict)
yield return entry;
}
}
나는 F #으로이 일을 찾은 유일한 방법 것은 사용 모니터, 예 :
let enumerate() =
if synchronize then
seq {
System.Threading.Monitor.Enter(locker)
try for entry in dict -> entry
finally System.Threading.Monitor.Exit(locker)
}
else seq { for entry in dict -> entry }
이는 사용하여 수행 할 수 있습니다 잠금 기능? 또는 일반적으로이 작업을 수행하는 더 좋은 방법이 있습니까? 필자는 절대 동기화가 필요하기 때문에 반복 컬렉션에 대한 복사본을 반환하지 않을 것이라고 생각합니다.
@kvb에 동의합니다. 원래 코드/디자인은 기껏해야 모호한 것으로 느낍니다. – Brian