Хотя цикл работает и является допустимой стратегией ожидания какой-либо фоновой операции, другие ответы, похоже, упускают ключевой момент;Вы должны позволить фоновой операции сделать некоторую работу.Чередование циклов while не очень продуктивно, но Windows сочтет основной поток приложения, который, вероятно, выполняет ожидание, очень важным, и будет проходить цикл сотни или тысячи раз, прежде чем когда-либо будет выполняться фоновая операция.получает один такт процессорного времени.
Чтобы избежать этого, используйте оператор Thread.Yield (), чтобы сказать процессору прокрутить все остальные потоки, ожидающие процессорного времени, и вернуться после завершения.Это позволяет компьютеру выполнять некоторую работу, пока вы ожидаете фонового процесса, вместо того, чтобы монополизировать ЦП, чтобы он вращался по существу в пустом цикле.Это действительно просто;Вот пересмотренный ответ Джастина:
var startTime = DateTime.Now;
var endTime = DateTime.Now.AddSeconds(5);
var timeOut = false;
while (_dbConnection.State == ConnectionState.Connecting)
{
if (DateTime.Now.CompareTo(endTime) >= 0)
{
timeOut = true;
break;
}
Thread.Yield(); //tells the kernel to give other threads some time
}
if (timeOut)
{
Console.WriteLine("Connection Timeout");
// TODO: Handle your time out here.
}