public override void Execute() { var broker = new BrokerService(); var transaction = broker.BeginTransaction(); Exception _ex_ = null; try { foreach (var cmd in _lst) { cmd.State = transaction; cmd.Execute(); } broker.CommitTransaction(transaction); } catch (Exception ex) { _ex_ = ex; broker.RollbackTransaction(transaction); } if (null != _ex_) { if (WhenFailed != null) { WhenFailed.Execute(); } else { throw _ex_; } } }