Esempio n. 1
0
 /// <summary>
 /// Put "QUEUED" messages at back of queue
 /// </summary>
 /// <param name="queued"></param>
 private void QueueExpectQueued()
 {
     QueuedCommands.Insert(0, new QueuedRedisOperation()
     {
         VoidReadCommand = RedisClient.ExpectQueued
     });
 }
        async ValueTask <bool> IRedisTransactionAsync.CommitAsync(CancellationToken token)
        {
            bool rc = true;

            try
            {
                numCommands = QueuedCommands.Count / 2;

                //insert multi command at beginning
                QueuedCommands.Insert(0, new QueuedRedisCommand
                {
                }.WithAsyncReturnCommand(VoidReturnCommandAsync: r => { Init(); return(default); })
Esempio n. 3
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);
        }
 /// <summary>
 /// Put "QUEUED" messages at back of queue
 /// </summary>
 partial void QueueExpectQueuedAsync()
 {
     QueuedCommands.Insert(0, new QueuedRedisOperation
     {
     }.WithAsyncReadCommand(RedisClient.ExpectQueuedAsync));
 }