private Task <TResult> ExecuteReadOnlyAsync <TState, TIntermediate, TResult>(TState state, Delegate handler, Delegate?success, CancellationToken ct)
        {
            Contract.NotNull(handler, nameof(handler));
            if (ct.IsCancellationRequested)
            {
                return(Task.FromCanceled <TResult>(ct));
            }
            ThrowIfDisposed();

            var context = new FdbOperationContext(this, FdbTransactionMode.ReadOnly | FdbTransactionMode.InsideRetryLoop, ct);

            return(FdbOperationContext.ExecuteInternal <TState, TIntermediate, TResult>(context, state, handler, success));
        }
        private Task <TResult> ExecuteReadWriteAsync <TState, TIntermediate, TResult>(TState state, Delegate handler, Delegate?success, CancellationToken ct)
        {
            Contract.NotNull(handler, nameof(handler));
            if (ct.IsCancellationRequested)
            {
                return(Task.FromCanceled <TResult>(ct));
            }
            ThrowIfDisposed();
            if (m_readOnly)
            {
                throw new InvalidOperationException("Cannot mutate a read-only database.");
            }

            var context = new FdbOperationContext(this, FdbTransactionMode.Default | FdbTransactionMode.InsideRetryLoop, ct);

            return(FdbOperationContext.ExecuteInternal <TState, TIntermediate, TResult>(context, state, handler, success));
        }