Пример #1
0
        protected void Execute()
        {
            int count = QueuedCommands.Count;

            for (int i = 0; i < count; ++i)
            {
                var op = QueuedCommands[0];
                QueuedCommands.RemoveAt(0);
                op.Execute(RedisClient);
                QueuedCommands.Add(op);
            }
        }
Пример #2
0
        public bool Commit()
        {
            bool rc = true;

            try
            {
                _numCommands = QueuedCommands.Count / 2;

                //insert multi command at beginning
                QueuedCommands.Insert(0, new QueuedRedisCommand()
                {
                    VoidReturnCommand = r => Init(),
                    VoidReadCommand   = RedisClient.ExpectOk,
                });


                //the first half of the responses will be "QUEUED",
                // so insert reading of multiline after these responses
                QueuedCommands.Insert(_numCommands + 1, new QueuedRedisOperation()
                {
                    IntReadCommand       = RedisClient.ReadMultiDataResultCount,
                    OnSuccessIntCallback = handleMultiDataResultCount
                });

                // add Exec command at end (not queued)
                QueuedCommands.Add(new RedisCommand()
                {
                    VoidReturnCommand = r => Exec()
                });

                //execute transaction
                Exec();

                /////////////////////////////
                //receive expected results
                foreach (var queuedCommand in QueuedCommands)
                {
                    queuedCommand.ProcessResult();
                }
            }
            catch (RedisTransactionFailedException e)
            {
                rc = false;
            }
            finally
            {
                RedisClient.Transaction = null;
                ClosePipeline();
                RedisClient.AddTypeIdsRegisteredDuringPipeline();
            }
            return(rc);
        }
Пример #3
0
        protected async ValueTask ExecuteAsync()
        {
            int count = QueuedCommands.Count;

            for (int i = 0; i < count; ++i)
            {
                var op = QueuedCommands[0];
                QueuedCommands.RemoveAt(0);
                await op.ExecuteAsync(RedisClient).ConfigureAwait(false);

                QueuedCommands.Add(op);
            }
        }
Пример #4
0
 public override void QueueCommands(List <Command> commands)
 {
     QueuedCommands.Add(ConvertCommand(commands));
 }
Пример #5
0
 public override void QueueCommands(List <Command> commands)
 {
     QueuedCommands.Add($"addCommand(\"{ConvertCommand(commands)}\");");
 }