private async Task PollAssessmentInParallel()

in src/Assessment/BatchAssessments.cs [117:170]


        private async Task PollAssessmentInParallel(AssessmentInformation assessmentInfo, UserInput userInputObj)
        {
            int numberOfTries = 0;

            while (numberOfTries < 25)
            {
                Thread.Sleep(60000);
                AssessmentPollResponse pollResult;
                try
                {
                    pollResult = await new HttpClientHelper().PollAssessment(userInputObj, assessmentInfo);

                    if (pollResult == AssessmentPollResponse.Error)
                    {
                        userInputObj.LoggerObj.LogInformation($"Polling for assessment {assessmentInfo.AssessmentName} resulted in non-retryable error");
                        numberOfTries += 1;
                    }

                    if (!AssessmentStatusMap.ContainsKey(assessmentInfo))
                        AssessmentStatusMap.Add(assessmentInfo, pollResult);
                    else
                        AssessmentStatusMap[assessmentInfo] = pollResult;
                }
                catch (OperationCanceledException)
                {
                    throw;
                }
                catch (AggregateException aePollAssessment)
                {
                    string errorMessage = "";
                    foreach (var e in aePollAssessment.Flatten().InnerExceptions)
                    {
                        if (e is OperationCanceledException)
                            throw e;
                        else
                        {
                            errorMessage = errorMessage + e.Message + " ";
                        }
                    }
                    userInputObj.LoggerObj.LogWarning($"Assessment {assessmentInfo.AssessmentName} polling failed: {errorMessage}");
                }
                catch (Exception ex)
                {
                    userInputObj.LoggerObj.LogWarning($"Assessment {assessmentInfo.AssessmentName} polling failed: {ex.Message}");
                }

                if (AssessmentStatusMap[assessmentInfo] == AssessmentPollResponse.Completed ||
                    AssessmentStatusMap[assessmentInfo] == AssessmentPollResponse.OutDated ||
                    AssessmentStatusMap[assessmentInfo] == AssessmentPollResponse.Invalid)
                    break;
            }

            userInputObj.LoggerObj.LogInformation(1, $"Polling for assessment {assessmentInfo.AssessmentName} completed"); // 1 % increase for every polling completion. Total should be less than 65 %
        }