/// <summary> /// Asynchronously handles the command request. /// </summary> /// <param name="request">The command request.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>A task that represents the asynchronous operation. /// The task result contains the result of the command request.</returns> public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken) { try { cancellationToken.ThrowIfCancellationRequested(); var response = await ProtectedHandleAsync(request, cancellationToken); if (SubEventType != SubEventType.None) { var principal = PrincipalProvider.GetPrincipal(); var auditData = new AuditDataModel() { Entity = response, Command = request }; await Audit.AddDefaultEventAsync(principal, auditData, SubEventType); } return(response); } catch (Exception) { Context.RollBackTransaction(); throw; } }