나는 상황을 설명하기 위해 최선을 다할 것입니다.
public class A
{
Int64 Id { get; set; }
Decimal Foo { get; set; }
}
public class B
{
Int64 Id { get; set; }
Decimal Bar { get; set; }
}
public class C
{
Int64 Id { get; set; }
Decimal? Foo { get; set; }
Decimal? Bar { get; set; }
}
public class test
{
ConcurrentDictionary<Int64, C> dictionary { get; set; }
List<A> listA { get; set; }
List<B> listB { get; set; }
}
listA 및 listB는 각각 5 백만 개의 개체를 포함합니다.
그래서 제가하는 일은 별도의 스레드에서 listA와 listB를 반복하는 것입니다. 사전에 ID가 포함되어 있는지 확인한 다음 값을 가져와 일치하는 속성을 설정합니다.
제 질문은 이것이 스레드 세이프입니까? 그렇지 않은 경우 스레드 안전을 만드는 가장 좋은 방법은 무엇입니까?
하나 더 :
더미 데이터를 사용하는 예 :
List<A> listA = new List<A>
{
new A { Id = 1, Foo = 5 },
new A { Id = 2, Foo = 10 },
new A { Id = 3, Foo = 100 }
};
List<B> listB = new List<B>
{
new A { Id = 1, Bar = 3 },
new A { Id = 2, Bar = 2 },
new A { Id = 3, Bar = 1 }
};
ConcurrentDictionary<Int64, C> dictionary = new ConcurrentDictionary<Int64, C>
{
Keys = {1, 2, 3},
Values = { new C { Id = 1 }, new C { Id = 2 }, new C { Id = 3 } }
};
나중에 사전에 다음과 같은 키 / 값 쌍이 있습니다.
Key = 1 , value = object of class C with properties : Id = 1, Foo = 5, Bar = 3,
Key = 1 , value = object of class C with properties : Id = 1, Foo = 10, Bar = 2,
Key = 1 , value = object of class C with properties : Id = 1, Foo = 100, Bar = 1
루프에서 수행하는 모든 작업이 이미 동시 사전에있는 객체 C에 액세스하고 Foo 및 Bar 속성을 각각 설정하는 것이라면 예, 스레드로부터 안전해야합니다.
ConcurrentDictionary에서 항목을 삽입하거나 제거하는 경우에도 ConcurrentDictionary를 적절하게 사용하는 경우 스레드로부터 안전해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다