public async Task Handle(T message, IMessageHandlerContext context) { var messageType = message.GetType().Name; logger.LogInfo($"Processing {messageType} event. Ukprn: {message.Ukprn}"); ((ESFA.DC.Logging.ExecutionContext)executionContext).JobId = message.JobId.ToString(); if (message.Ukprn == 0) { throw new ArgumentException($"Ukprn cannot be 0. Job Id: {message.JobId}"); } logger.LogDebug($"Getting AccountId for Ukprn: {message.Ukprn}."); var accountIds = await repository.GetEmployerAccountsByUkprn(message.Ukprn).ConfigureAwait(false); var tasks = new List <Task>(); foreach (var account in accountIds) { var accountToUse = levyMessageRoutingService.GetDestinationAccountId(account.Item1, account.Item2); tasks.Add(InvokeSubmissionAction(accountToUse, message)); } await Task.WhenAll(tasks).ConfigureAwait(false); logger.LogInfo($"Successfully processed {messageType} for Job: {message.JobId}, UKPRN: {message.Ukprn}. Skipped submission removing as no account ID found."); }