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)); }
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)); }
public Task <Slice> GetAsync(ReadOnlySpan <byte> key, bool snapshot, CancellationToken ct) { return(FdbFuture.CreateTaskFromHandle( FdbNative.TransactionGet(m_handle, key, snapshot), (h) => GetValueResultBytes(h), ct )); }
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)); }
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)); }