     @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
     public func values(
         in reader: DatabaseReader,
-        scheduling scheduler: ValueObservationScheduler = .async(onQueue: .main))
+        scheduling scheduler: ValueObservationScheduler = .async(onQueue: .main),
+        bufferingPolicy: BufferingPolicy = .unbounded)
     -> AsyncValueObservation<Reducer.Value>
     {
-        AsyncValueObservation { onError, onChange in
+        AsyncValueObservation(bufferingPolicy: bufferingPolicy) { onError, onChange in
             self.start(in: reader, scheduling: scheduler, onError: onError, onChange: onChange)
         }
     }

extension ValueObservation {
    // MARK: - Asynchronous Observation
    
    /// The database observation, as an asynchronous sequence of
    /// database changes.
    ///

@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
public struct AsyncValueObservation<Element>: AsyncSequence {
    public typealias AsyncIterator = Iterator
    typealias BufferingPolicy = AsyncThrowingStream<Element, Error>.Continuation.BufferingPolicy
    typealias StartFunction = (
        _ onError: @escaping (Error) -> Void,
        _ onChange: @escaping (Element) -> Void)
        -> DatabaseCancellable
    
    var bufferingPolicy: BufferingPolicy
    var start: StartFunction
    
    public func makeAsyncIterator() -> Iterator {
        // This cancellable will be retained by the Iterator, which itself will
