public async Task <CommandHandlingResult> Handle(AcquireLockCommand command, IEventPublisher publisher)
        {
            var transactionExecution = await _repository.GetAsync(command.TransactionId);

            if (transactionExecution.LockAcquired)
            {
                _log.Info("Address lock command has been skipped, since lock already was performed earlier", command);

                return(CommandHandlingResult.Ok());
            }

            if (await _locker.TryLockAsync(command.TransactionId))
            {
                publisher.PublishEvent(new LockAcquiredEvent
                {
                    TransactionId = command.TransactionId
                });
            }
            else
            {
                publisher.PublishEvent(new LockRejectedEvent
                {
                    TransactionId = command.TransactionId
                });
            }

            _chaosKitty.Meow(command.TransactionId);

            return(CommandHandlingResult.Ok());
        }
Пример #2
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private java.util.concurrent.Future<Void> perform(AcquireLockCommand acquireLockCommand, boolean wait) throws Exception
        private Future <Void> Perform(AcquireLockCommand acquireLockCommand, bool wait)
        {
            Future <Void> future = ExecuteDontWait(acquireLockCommand);

            if (wait)
            {
                AwaitFuture(future);
            }
            else
            {
                WaitUntilWaiting();
            }
            return(future);
        }