Выполнение задания параллельно с N параллельными потоками

#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 и я не могу настроить их вручную, как то, что вы сделали.