public TResult GetOrAdd <TKey, TResult>(TKey key, TResult result)
        {
            var getRequest = new RocksGrpcRequest()
            {
                Key     = key.xToJson(),
                Value   = result.xToJson(),
                Command = "GET",
                Path    = "testdb5"
            };
            var clientResult = _client.ExecuteCommandAsync(getRequest).GetAwaiter().GetResult();

            if (clientResult.State == false)
            {
                var putRequest = new RocksGrpcRequest()
                {
                    Key     = key.xToJson(),
                    Value   = result.xToJson(),
                    Command = "PUT",
                    Path    = "testdb5"
                };
                _client.ExecuteCommandAsync(putRequest).GetAwaiter().GetResult();
            }

            return(JsonConvert.DeserializeObject <TResult>(clientResult.Value));
        }
        public override Task <RocksGrpcReply> ExecuteCommand(RocksGrpcRequest request, ServerCallContext context)
        {
            var rocksDbRequest = new RocksDBRequest()
            {
                Path      = request.Path,
                Command   = ROCKSDB_COMMAND.Parse(request.Command),
                Key       = request.Key,
                Value     = request.Value,
                Keys      = request.Keys,
                KeyValues = new Dictionary <string, string>(request.KeyValues)
            };
            var result         = RocksDBHandler.Instance.ExecuteCommand(rocksDbRequest);
            var rocksGrpcReply = new RocksGrpcReply()
            {
                Key       = result.Key.xSafe(),
                Value     = result.Value.xSafe(),
                State     = result.State.xSafe <bool>(false),
                StateMsg  = result.StateMsg.xSafe(),
                KeyValues = { result.KeyValues.xSafe <Dictionary <string, string> >() }
            };

            return(Task.FromResult(rocksGrpcReply));
        }