Здравствуйте, another_coder, Вы писали:
_>Как запустить поток так, чтобы строка, выводящая "waiting" выполнилась и программа нормально завершилась?
Обернуть запускаемый код в свой хелпер с try-catch. Чужой недоверенный код — вынести в отдельный домен/процесс (смотря насколько всё запущено).