В общем, у вас есть GCRoot для работника до тех пор, пока поток, который вы назвали worker.Run on, хорошо работает. Когда метод Run заканчивается, работник становится кандидатом на сборку мусора (поскольку на него больше нет ссылок ни в основном потоке, ни в каком-либо рабочем потоке).
Рабочий получает ссылку на мьютекс, но у вас возникнет проблема только в том случае, если это будет наоборот (наличие статической переменной, содержащей ссылку на вашего работника).
Итак, в основном, GC позаботится о вашем работнике.
Вы можете столкнуться с неприятностями, если один из ваших рабочих блокирует. У вас будет конвой или, что еще хуже, если все ваши работники застрянут, никакой работы не будет сделано вообще. Я бы реализовал таймаут в работнике, чтобы убедиться, что он не блокирует весь процесс.