/// <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); })
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)); }