Ejemplo n.º 1
0
        private void AsyncProcessEvent <TEvent>(TEvent @event, IEventSubscriber <TEvent> _h)
            where TEvent : IEvent
        {
            var _retry = _h.Strategy.Retry;
            var _fail  = false;

            do
            {
                try
                {
                    _fail = false;
                    if (_h.Strategy.TimeOut.HasValue)
                    {
                        Task.Factory.StartNew(() => _h.Handle(@event)).WithTimeout(_h.Strategy.TimeOut.Value);
                    }
                    else
                    {
                        Task.Factory.StartNew(() => _h.Handle(@event));
                    }
                }
                catch (AggregateException ex)
                {
                    _fail = true;
                    ex.Handle(e =>
                    {
                        _h.Error(ex);
                        return(true);
                    });
                }
            }while (Interlocked.Decrement(ref _retry) > 0 && _fail == true);
            if (_fail && _h.Strategy.PersistentStore.HasValue && _h.Strategy.PersistentStore.Value)
            {
                //TODO:持久化存储,处理失败的事件
            }
        }
Ejemplo n.º 2
0
        private void SyncProcessEvent <TEvent>(TEvent @event, IEventSubscriber <TEvent> _h) where TEvent : IEvent
        {
            var _retry = _h.Strategy.Retry;
            var _fail  = false;

            do
            {
                try
                {
                    _fail = false;
                    _h.Handle(@event);
                }
                catch (Exception ex)
                {
                    _fail = true;
                    _h.Error(ex);
                }
            }while (Interlocked.Decrement(ref _retry) > 0 && _fail == true);
            if (_fail && _h.Strategy.PersistentStore.HasValue && _h.Strategy.PersistentStore.Value)
            {
                //TODO:持久化存储,处理失败的事件
            }
        }