private async Task <BuildResult> GetBuildTaskResultsAsync(Dictionary <string, TaskResult?> taskResults, IBuildHttpClient buildClient, TeamProject project)
        {
            BuildResult overallResult = BuildResult.None;
            Timeline    timeline      = await buildClient.GetBuildTimelineAsync(project.Id, Options.BuildId);

            foreach (string task in Options.TaskNames)
            {
                TimelineRecord?record = timeline.Records.FirstOrDefault(rec => rec.Name == task);
                if (record is null)
                {
                    throw new InvalidOperationException(
                              $"Build task with name '{task}' could not be found in the build timeline.");
                }

                taskResults[task] = record.Result;

                if (record.Result is not null)
                {
                    switch (record.Result.Value)
                    {
                    case TaskResult.Succeeded:
                        if (overallResult == BuildResult.None)
                        {
                            overallResult = BuildResult.Succeeded;
                        }
                        break;

                    case TaskResult.SucceededWithIssues:
                        if (overallResult == BuildResult.None || overallResult == BuildResult.Succeeded)
                        {
                            overallResult = BuildResult.PartiallySucceeded;
                        }
                        break;

                    case TaskResult.Failed:
                        overallResult = BuildResult.Failed;
                        break;

                    case TaskResult.Canceled:
                        overallResult = BuildResult.Canceled;
                        break;
                    }
                }
            }

            return(overallResult);
        }