TransactionGet() public static method

public static TransactionGet ( TransactionHandle transaction, Slice key, bool snapshot ) : FutureHandle
transaction TransactionHandle
key Slice
snapshot bool
return FutureHandle
コード例 #1
0
        public Task <Slice[]> GetValuesAsync(ReadOnlySpan <Slice> keys, bool snapshot, CancellationToken ct)
        {
            Contract.Requires(keys != null);

            if (keys.Length == 0)
            {
                return(Task.FromResult(Array.Empty <Slice>()));
            }

            var futures = new FutureHandle[keys.Length];

            try
            {
                //REVIEW: as of now (700), there is no way to read multiple keys in a single API call
                for (int i = 0; i < keys.Length; i++)
                {
                    futures[i] = FdbNative.TransactionGet(m_handle, keys[i].Span, snapshot);
                }
            }
            catch
            {
                // cancel all requests leading up to the failure
                for (int i = 0; i < futures.Length; i++)
                {
                    if (futures[i] == null)
                    {
                        break;
                    }
                    futures[i].Dispose();
                }
                throw;
            }
            return(FdbFuture.CreateTaskFromHandleArray(futures, (h) => GetValueResultBytes(h), ct));
        }
コード例 #2
0
        public Task <Slice[]> GetValuesAsync(Slice[] keys, bool snapshot, CancellationToken ct)
        {
            Contract.Requires(keys != null);

            if (keys.Length == 0)
            {
                return(Task.FromResult(Array.Empty <Slice>()));
            }

            var futures = new FutureHandle[keys.Length];

            try
            {
                for (int i = 0; i < keys.Length; i++)
                {
                    futures[i] = FdbNative.TransactionGet(m_handle, keys[i], snapshot);
                }
            }
            catch
            {
                for (int i = 0; i < keys.Length; i++)
                {
                    if (futures[i] == null)
                    {
                        break;
                    }
                    futures[i].Dispose();
                }
                throw;
            }
            return(FdbFuture.CreateTaskFromHandleArray(futures, (h) => GetValueResultBytes(h), ct));
        }
コード例 #3
0
 public Task <Slice> GetAsync(ReadOnlySpan <byte> key, bool snapshot, CancellationToken ct)
 {
     return(FdbFuture.CreateTaskFromHandle(
                FdbNative.TransactionGet(m_handle, key, snapshot),
                (h) => GetValueResultBytes(h),
                ct
                ));
 }
コード例 #4
0
 public Task <(FdbValueCheckResult Result, Slice Actual)> CheckValueAsync(ReadOnlySpan <byte> key, Slice expected, bool snapshot, CancellationToken ct)
 {
     return(FdbFuture.CreateTaskFromHandle(
                FdbNative.TransactionGet(m_handle, key, snapshot),
                (h) =>
     {
         if (TryPeekValueResultBytes(h, out var actual))
         {                         // key exists
             return !expected.IsNull && expected.Span.SequenceEqual(actual) ? (FdbValueCheckResult.Success, expected) : (FdbValueCheckResult.Failed, Slice.Copy(actual));
         }
コード例 #5
0
        public Task <Slice> GetAsync(Slice key, bool snapshot, CancellationToken ct)
        {
            var future = FdbNative.TransactionGet(m_handle, key, snapshot);

            return(FdbFuture.CreateTaskFromHandle(future, (h) => GetValueResultBytes(h), ct));
        }