public async Task Publish <T>(T command, CancellationToken cancellationToken = default) where T : class, ICommand { if (_hook != null) { try { if (_hook?.OnReceived != null) { _hook.OnReceived(command); } await _commandPublisher.Publish(command); if (_hook?.OnPublished != null) { _hook.OnPublished(command); } } catch (Exception ex) { bool suppressError = false; if (_hook?.OnErrored != null) { suppressError = _hook.OnErrored(ex, command); } if (!suppressError) { throw; } } } else { await _commandPublisher.Publish(command); } }