#c# #unit-testing #task-parallel-library
#c# #модульное тестирование #задача-параллельная библиотека
Вопрос:
Иногда мне нужно, чтобы тестовый метод выполнялся одновременно N потоками (например, что происходит в ASP.NET код).
Есть ли простой способ сделать это с Task Library
?
[TestMethod()]
public void DoSomethingTest()
{
// Do something which has concurrency issues i.e. database, IO, ...
DoSomething();
}
// Something like:
[TestMethod()]
public void DoSomethingTest()
{
int n = 1000; // run 1000 of DoSomething() simultaneously
Parallel.Invoke(() => DoSomething(), n);
}
Комментарии:
1. запустить 1000 из них нереально. Подумайте,
NumberOfCores * F
где F равно 0,5 .. 2
Ответ №1:
Да, параллель существует.Для :
[TestMethod()]
public void DoSomethingTest()
{
int n = 10; // changed to 10, see comment
Parallel.For(0, n, i => DoSomething());
// here all threads are completed
}
Но обратите внимание, что TPL будет определять степень параллелизма, так же как ASP.NET Пул потоков…
Вы можете добавить ParallelOptions, чтобы задать степень параллелизма, но я бы не стал.
Ответ №2:
Да, я тестирую некоторые методы параллельно с TPL.
Вот несколько примеров кода :
var parent = Task.Factory.StartNew(() =>
{
var tasksI = Task.Factory.StartNew(() =>
{
for (int i = 0; i < Constants.TaskCount; i )
DoMethod1Parallel();
});
var tasksII = Task.Factory.StartNew(() =>
{
for (int i = 0; i < Constants.TaskCount; i )
DoMethod2Parallel()
});
tasksI .Wait();
tasksII.Wait();
});
parent.Wait();
Assert.AreNotEqual(parent.IsFaulted, "Executing is faulted!");
Я вызываю Method1 и Method2 более одного раза и параллельно с TPL. Таким образом, я могу проверить возможность параллельного выполнения!
С уважением, Патрик
Комментарии:
1. Мне нужно большое количество
N
и я не могу настроить их вручную, как то, что вы сделали.