public async Task <ISaga> Publish(ISagaEvent @event, IDictionary <string, object> executionValues) { Type eventType = @event.GetType(); SagaID sagaId = SagaID.From(@event.ID); ISagaModel model = sagaRegistrator. FindModelForEventType(eventType); if (model == null) { throw new SagaEventNotRegisteredException(eventType); } ISaga newSaga = await CreateNewSagaIfRequired(model, sagaId, eventType); try { return(await ExecuteSaga( @event, model, newSaga, SagaID.From(newSaga?.Data?.ID ?? sagaId.Value), executionValues, false)); } catch { //if (newSaga != null) // await sagaPersistance.Remove(newSaga.Data.ID); throw; } }
public async Task <ISaga> Publish(ISagaEvent @event, IDictionary <string, object> executionValues, Guid?parentId, SagaRunOptions runOptions) { runOptions = runOptions ?? new SagaRunOptions(); Type eventType = @event.GetType(); SagaID sagaId = SagaID.From(@event.ID); ISagaModel model = sagaRegistrator. FindModelForEventType(eventType); if (model == null) { throw new SagaEventNotRegisteredException(eventType); } SagaID?parentSagaId = parentId == null ? (SagaID?)null : SagaID.From(parentId.Value); ISaga newSaga = await CreateNewSagaIfRequired(model, sagaId, parentSagaId, eventType); var id = SagaID.From(newSaga?.Data?.ID ?? sagaId.Value); try { var createdSaga = await ExecuteSaga( @event, model, newSaga, id, executionValues, false, runOptions); return(createdSaga); } /*catch (SagaStopException ex) * { * return await sagaPersistance.Get(id.Value); * }*/ catch { //if (newSaga != null) // await sagaPersistance.Remove(newSaga.Data.ID); throw; } }