Одним из решений может быть просто запустить DO(..)
в другом потоке и прослушать нажатие клавиши в основном потоке Console.ReadLine()
или любую другую перегрузку.В тот момент, когда вы получаете ключ, дайте сигнал DO(...)
потоку метода прекратить.
РЕДАКТИРОВАТЬ
Простой, очень базовый примерC # 2.0) с помощью переменной volatile bool
можно найти здесь:
Образец