Наверное, это и имеет смысл сделать
Имеет смысл обмазаться примитивами синхронизации типа всяких семафоров и т.д. и подменять, например, код выполняемый в тасках на свой тестовый. В итоге таска будет завершаться по сигналу, который будет даваться примитиву синхронизации из теста. Например, считаешь числа фибаначи и есть у тебя интерфейс IFibanacii (хз как фибаначи пишется правильно). Реальный у тебя расчет в Fibanacii : IFibanacii. А для теста в контейнере регается TestFibanacii : IFibanacii который выставляет может быть какие то методы или свойства, через которые можно его, типа, завершить. В итоге код в задаче будет отрабатывать сколько нужно. По секундам, миллисекундам точно ничего не нужно ловить, это гиблое дело и те кто будут код поддерживать не поблагодарят. Ну и это гадание на гуще кофейной, т.к. кода не видно.