Ejemplo n.º 1
0
        private void TryPersistEvents(EventStreamContext context, Action successAction)
        {
            Func <bool> tryPersistEvents = () =>
            {
                try
                {
                    _eventStore.Append(context.EventStream);
                    return(true);
                }
                catch (Exception ex)
                {
                    if (ex is ConcurrentException && IsEventStreamCommitted(context.EventStream))
                    {
                        return(true);
                    }

                    var errorMessage = string.Format("{0} raised when persisting events:{1}", ex.GetType().Name, context.EventStream.GetStreamInformation());
                    _logger.Error(errorMessage, ex);

                    if (ex is ConcurrentException)
                    {
                        context.SetConcurrentException(new ErrorInfo(errorMessage, ex));
                        return(true);
                    }

                    return(false);
                }
            };

            _retryService.TryAction("TryPersistEvents", tryPersistEvents, 3, successAction);
        }