public async Task Process(NewItemRequest newItem) { try { var documentResult = new DocumentResultResponse(); var filePath = _fileManager.Download(newItem.DocumentUrl); var numberOfPages = _fileManager.GetNumberOfPages(filePath); for (var page = 1; page <= numberOfPages; page++) { var pagePath = _fileManager.GeneratePage(filePath, page); var text = _pdfToText.Get(pagePath); if (text == null) { var imagePath = _fileManager.GeneratePageInImage(filePath, page); text = await _cognitive.Get(imagePath).ConfigureAwait(false); _fileManager.Delete(imagePath); } documentResult.AddProcessedPage(text, page); _fileManager.Delete(pagePath); } _fileManager.Delete(filePath); documentResult.Success = true; _backgroundJobs.Enqueue(() => _callback.Send(documentResult, newItem)); } catch (Exception ex) { var documentResult = new DocumentResultResponse { Success = false, ErrorMessage = ex.Message }; _backgroundJobs.Enqueue(() => _callback.Send(documentResult, newItem)); } }