메서드가 여러 스레드에서 호출 될 때 동시성 문제가 없음을 테스트하고 싶습니다. 나는이 메서드가 동시에 3 번 호출되고 동시성 문제가 없는지 확인하기 위해 2000 명의 고객을 내 캐시에 삽입하는 것을 시뮬레이션합니다. 이 테스트는 동시성 문제를 테스트하는 데 의미가 있습니까?
public void Should_Insert_2000_Customers_Using_Concurrency()
{
var fakeCustomers = InitCustomersFromDb();
Action insertCustomersFrom_0_to_1000 = new Action(() =>
{
Parallel.For(0, 1000, x =>
{
CustomerCache.Instance.SetCustomer(x.ToString(), fakeCustomers[0]);
});
});
Action insertCustomersFrom_1000_to_2000 = new Action(() =>
{
Parallel.For(1000, 2000, x =>
{
CustomerCache.Instance.SetCustomer(x.ToString(), fakeCustomers[0]);
});
});
Action insertCustomersFrom_0_to_2000 = new Action(() =>
{
Parallel.For(0, 2000, x =>
{
CustomerCache.Instance.SetCustomer(x.ToString(), fakeCustomers[0]);
});
});
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(insertCustomersFrom_0_to_1000));
tasks.Add(Task.Factory.StartNew(insertCustomersFrom_1000_to_2000));
tasks.Add(Task.Factory.StartNew(insertCustomersFrom_0_to_2000));
Task.WaitAll(tasks.ToArray());
var customers = CustomerCache.Instance.GetCustomers();
Assert.That(customers.Count == 2000);
}
은 동시성 문제를 보여주는 효과적 일 내
CustomerCache
에 대한 여러 개의 동시
Parallel.For
반복을 실행하는 것인가?
그럼 궁금한 점은 무엇입니까? 코드 검토를 요청합니까? – slugster
이러한 종류의 테스트가 멀티 스레딩을 테스트하는 것이 좋은지 알고 싶습니다. 아니면 쓸데없는 경우 ... – Florian
Parallel.For asynchrone, 그래서 당신은 얼마나 많은 CPU의/코어에 따라 더 많은 스레드를 사용합니다. – Maarten