Модульное тестирование параллельного программирования
У меня есть инструмент, который выполняет различные задачи одновременно.
Код выглядит так:
while (true)
{
tasks.ForEachWithIndex((item, index) =>
{
if (tasksToExecute[index] == null || tasksToExecute[index].ShouldRerun())
{ tasksToExecute[index] = System.Threading.Tasks.Task.Factory.StartNewRecurring(() => ScheduledTaskHelper.ExecutePlatformTask(logWriter, uow, item)); }
});
// The tasks have been added to the factory, so let's start them now.
var handleTaskCompletionTask = System.Threading.Tasks.Task.WhenAny(tasksToExecute.ToArray()).ContinueWith(
(completedTask, o) =>
{
var taskId = completedTask.Result.Id;
tasksToExecute.Find(x => x.Id == taskId).Rerun(true);
}, null);
try { handleTaskCompletionTask.Wait(); }
catch (Exception ex)
{ }
}
Примечание: я не буду публиковать все детали реализации, потому что это приведет нас к многим.
Давайте предположим, что у меня есть 2 задачи, затем система берет 2 задачи и обрабатывает их параллельно. Когда одна из задач завершена, она снова обрабатывается, добавляя ее в параллельный цикл.
Но сейчас я борюсь за то, как провести модульное тестирование этой реализации. Я думал о следующем подходе:
Создайте 2 задачи:
- 1 задание, которое выполняется в течение 30 секунд.
- 1 задание, которое длится 5 секунд.
Проверяет, что через 1 секунду обе задачи имеют статус IsRunning. Проверяет, что через 15 секунд все еще обе задачи имеют статус IsRunning.
Я надеюсь, что кто-то может помочь мне с этим.