public void MarkAlive(DateTime timestamp)
        {
            var newReading = new RecordedHeartbeat(HeartbeatStatus.Alive, timestamp);
            var done       = false;

            while (!done)
            {
                var priorReading = heartbeat;

                if (priorReading.Timestamp.GetValueOrDefault() <= timestamp)
                {
                    done = Interlocked.CompareExchange(ref heartbeat, newReading, priorReading) == priorReading;
                }
                else
                {
                    done = true;
                }
            }
        }
        public RecordedHeartbeat MarkDeadIfOlderThan(DateTime cutoff)
        {
            var done = false;

            while (!done)
            {
                var priorReading = heartbeat;
                if (priorReading.Timestamp.GetValueOrDefault() < cutoff)
                {
                    var newReading = new RecordedHeartbeat(HeartbeatStatus.Dead, priorReading.Timestamp);
                    done = Interlocked.CompareExchange(ref heartbeat, newReading, priorReading) == priorReading;
                }
                else
                {
                    done = true;
                }
            }

            return(heartbeat);
        }