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); }