Чтобы ответить на ваш вопрос:
"Безопасно ли делать это таким образом в отношении контекста выполнения, памяти, трассировки стека или некоторых других вещей, о которых я не задумывался?"
Да;нет никаких проблем в отношении любой из упомянутых областей, о которых я могу думать.Вы в основном выходите из предыдущего задания и вводите новое задание.Ваша память очищается, когда вы продолжаете выполнение следующей задачи, и трассировка стека начинается с задачи, создающей выполнение.
Однако я бы лучше прокомментировал проблемы, возникающие в связи с обработкой ошибок и прерыванием выполнения, чтоэта реализация не поможет вам найти ошибку, подключиться к альтернативному адресу или какой-либо другой логике, которую вы можете ввести.По моему мнению, вы вводите неожиданную сложность в эту реализацию.
Если бы мне пришлось реализовать этот класс, я бы скорее вызвал отключенное событие, которое должен решить класс, использующий этот объект.Это даст вам гораздо более широкий спектр возможностей, например, уведомление других зависимых классов.
Кроме того, замораживание нити обычно не является хорошим решением.Я бы предпочел запустить таймер или что-то подобное.