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:持久化存储,处理失败的事件 } }
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:持久化存储,处理失败的事件 } }