我想测试从多个线程调用某个方法时,没有并发问题。我模拟该方法被同时调用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 2012-07-09 09:23:03
我想知道这些测试是否适合测试多线程。或者,如果它没用... – Florian 2012-07-09 09:30:24
Parallel.For是异步的,所以你使用更多的线程,取决于你有多少个CPU /核心。 – Maarten 2012-07-09 09:31:39