public void Clear()
 {
     while (true)
     {
         /*
          * it should be very hard to not succeed the first pass thru since this is typically is only called from
          * a single thread protected by a tryLock, but there is at least 1 other place (at time of writing this comment)
          * where reset can be called from (CircuitBreaker.markSuccess after circuit was tripped) so it can
          * in an edge-case conflict.
          *
          * Instead of trying to determine if someone already successfully called clear() and we should skip
          * we will have both calls reset the circuit, even if that means losing data added in between the two
          * depending on thread scheduling.
          *
          * The rare scenario in which that would occur, we'll accept the possible data loss while clearing it
          * since the code has stated its desire to clear() anyways.
          */
         ListState current  = state.Value;
         ListState newState = current.Clear();
         if (state.CompareAndSet(current, newState))
         {
             return;
         }
     }
 }