public IReservoirSnapshot GetSnapshot(bool resetReservoir)
        {
            Verify.NotDisposed(!disposed_, ReservoirDisposedMessage);

            WeightedSnapshot snapshot = null;

            ExecuteAsCriticalSection(() => {
                snapshot = new WeightedSnapshot(count_, sum_, values_.Values);
                if (resetReservoir)
                {
                    ResetReservoir();
                }
            });

            return(snapshot);
        }