Como obter os detalhes da exceção de um trabalho em segundo plano com falha com Hangfire

Nov 25 2020

Estou usando o Hangfire para disparar alguns trabalhos em segundo plano e, em seguida, estou verificando seu progresso procurando por trabalhos com falha usando:

IStorageConnection connection = JobStorage.Current.GetConnection();
JobData jobData = connection.GetJobData(jobId);

if (jobData.State == FailedState.StateName)
   // Some how get exception details

Gostaria de obter a exceção lançada que causou a falha do trabalho. (Estou jogando new Exception("test error")meu trabalho atualmente para testá-lo).

Não consigo encontrar nenhum documento ou exemplo de como posso obter essas informações, é possível?

Respostas

1 CodieCollinge Nov 25 2020 at 23:44

Depois de ver uma resposta para outra pergunta que usava o GetMonitoringApi, consegui usá-lo aqui para obter a mensagem de exceção assim:

if (jobData.State == FailedState.StateName)
{
  var failedJobsCount = JobStorage.Current.GetMonitoringApi()
      .FailedCount();

  var failedJob = JobStorage.Current.GetMonitoringApi()
      .FailedJobs(0, (int)failedJobsCount)
      .Where(j => j.Key == jobId)
      .SingleOrDefault();
  
  var exceptionMsg = failedJob.Value.ExceptionMessage;
}

Isso me dá a "test error"mensagem que foi lançada do meu trabalho. Sucesso!