Я действительно удивлен, что вы не пытались правильно вызвать код после завершения задачи, потому что кто сказал, что любой процесс завершится менее чем за 3 секунды?Не только это, но и то, что связывает другие процессы в течение полных 3 секунд.Я бы заменил эту реализацию методом задачи ContinueWith () для вызова GC после ее завершения.
Task.Factory
.StartNew(() => { throw new NullReferenceException("ex"); })
.ContinueWith(p => GC.Collect());
Если вам требуется блокировка до ее завершения (для примера кода, который вы использовали для отладки),мог также сделать WaitOne после запуска задачи и иметь ContinueWith (), сигнализирующий обработчику ожидания.Если вам приходится делать это в своем производственном коде, то, возможно, то, что вы пытаетесь выполнить, на самом деле является синхронным, когда вам вообще не нужно беспокоиться об использовании задачи.