TimeSpan.Сравнить сравнение - PullRequest
1 голос
/ 11 ноября 2011

Правильно ли предположить, что эта логика (объясненная в комментарии) неверна?

// While the current time is before the finish time, sleep the current thread.  
// The timer will continue to run the getting of the rates
while (TimeSpan.Compare(DateTime.Now.TimeOfDay,this._finishTime.TimeOfDay) == -1)

Мне кажется, после просмотра MSDN Docs для TimeSpan.Сравните, что я должен искать, когда правильный параметр равен 1 или 0 для достижения этой функциональности, но этот код был там в течение многих лет.

Ответы [ 2 ]

6 голосов
/ 11 ноября 2011

Это функционально эквивалентно:

while(now < finishTime);

Кажется, что оно будет работать правильно.Всякий раз, когда он достигает 0, текущее время равно finishTime, и всякий раз, когда он достигает 1, текущее время больше, чем finishTime.В любом случае цикл закончится.

Лучшим способом будет:

while(DateTime.Now < this._finishTime)

Это не имеет значения для TimeOfDay, что создает проблему, возникающую изо дня в день (как отметил @AakashM в комментариях).

2 голосов
/ 11 ноября 2011

Ну, это буквально ждет , в то время как ТЕПЕРЬ время <время окончания. </p>

Так что да, он будет выходить из цикла, когда он равен 0 или 1, но , в то время как это -1, он будет зацикливаться.

...