Почему DateTime.UtcNow.Subtract иногда дает мне огромное число? - PullRequest
0 голосов
/ 10 мая 2019

Почему DateTime.Subtract иногда возвращает действительно странные значения?

private ConcurrentDictionary<string, Request> _waitingList = new ConcurrentDictionary<string, Request>();

// send requests in thread #1 and set their SentAt time
_waitingList.TryAdd(macAddress, request);
request.SentAt = DateTime.UtcNow;

// then in a timer tick event in different thread every 5 seconds
private void OnTimerTick(object sender, ElapsedEventArgs e) {
   foreach (var waiting in _waitingList) { // ConcurrentDictionary<string, Request>
      var request = waiting.Value;
      var msSinceSent = DateTime.UtcNow.Subtract(request.SentAt).TotalMilliseconds;
        Debug.WriteLine($"sent *{request.Type}* {msSinceSent} ms ago");
   }
}
sent *PackageUpdate* 336.2019 ms ago
sent *PackageUpdate* 698.1145 ms ago
sent *PackageUpdate* 1059.864 ms ago
sent *PackageUpdate* 63693095680615.5 ms ago

Последнее значение огромно, я получаю их так часто и не могу понять, как этодаже возможно.

1 Ответ

3 голосов
/ 10 мая 2019

Если request.SentAt установлено на DateTime.MinValue, вы получите это значение.Я предполагаю, что в вашем хранилище данных он был нулевым или нулевым, и это где-то преобразуется в DateTime.MinValue.

Например, этот код:

Console.WriteLine(DateTime.UtcNow.Subtract(DateTime.MinValue).TotalMilliseconds);

Выведет это значение:

63693097183442,7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...