/// <inheritdoc />
        public async Task <TryValue <T> > TryGetAsync <T>(
            IValueKey <T> key, CancellationToken cancellation = default(CancellationToken))
        {
            IKeyValueStoreContracts.TryGetAsync(key);

            cancellation.ThrowIfCancellationRequested();
            var result = await this.store.TryGetAsync(key.Key, cancellation).DontMarshallContext();

            return(result.HasValue ? key.TryDeserialize(result.Value.Value) : TryValue.None <T>());
        }
        /// <inheritdoc />
        public Task RemoveAsync <T>(IValueKey <T> key, CancellationToken cancellation = default(CancellationToken))
        {
            IKeyValueStoreContracts.RemoveAsync(key);

            cancellation.ThrowIfCancellationRequested();

            var entity = new TEntity()
            {
                Key = key.Key,
            };

            return(this.store.RemoveAsync(entity));
        }
        /// <inheritdoc />
        public Task UpdateAsync <T>(
            IValueKey <T> key, T value, CancellationToken cancellation = default(CancellationToken))
        {
            IKeyValueStoreContracts.UpdateAsync(key);

            cancellation.ThrowIfCancellationRequested();

            var entity = new TEntity()
            {
                Key   = key.Key,
                Value = key.Serialize(value),
            };

            return(this.store.UpdateAsync(entity, cancellation));
        }