public async Task Handle(T command, CancellationToken cancellationToken = default) { if (_hook != null) { try { if (_hook?.OnReceived != null) { _hook.OnReceived(command); } await _handler.Handle(command, cancellationToken); if (_hook?.OnHandled != null) { _hook.OnHandled(command); } } catch (Exception ex) { bool suppressError = false; if (_hook?.OnErrored != null) { suppressError = _hook.OnErrored(ex, command); } if (!suppressError) { throw; } } } else { await _handler.Handle(command, cancellationToken); } }