Т.к. Вы не сказали, что используете TPL или пишете на WinForms, или WPF, то предполагаю, что это обычный синхронный код где-то в консоли.
Заведите таймер выше Вашего цикла, внутри цикла проверяете время и по достижению делаете выход из цикла через break. На коленке, без проверок, но думаю смысл уловите
var dateTimeStart = DateTime.Now;
const PERIOD = 3 * 60 * 1000;
while(true)
{
...
var dateTimeNow = DateTime.Now;
var interval = dateTimeNow - dateTimeStart;
if(interval.Milliseconds > PERIOD)
{
break;
}
}