private async Task <DailyReportModel> GetDailyReportAsync() { var getUsersTask = _webApiClient.GetUsersAsync(); var webApiStatisticsTask = _webApiClient.GetStatisticsAsync(); var reportStatisticsTask = _reportClient.GetStatisticsAsync(); var notificationStatisticsTask = _statsRepository.GetStatisticsAsync(); var identityStatisticsTask = _oAuthClient.GetDailyStatsAsync(); await Task.WhenAll(getUsersTask, webApiStatisticsTask, reportStatisticsTask, notificationStatisticsTask, identityStatisticsTask); var sharedExams = (await webApiStatisticsTask).SharedExams.ToDictionary(x => x.Id, x => x.Name); var examStatistics = await _reportClient.GetExamStatisticsAsync(sharedExams.Keys); var model = new DailyReportModel() { Statistics = await webApiStatisticsTask, ReportStatistics = await reportStatisticsTask, NotificationStatistics = await notificationStatisticsTask, IdentityStatistics = await identityStatisticsTask, }; model.NotificationStatistics.TopSmsSenderEmailInDay = getUsersTask.Result.FirstOrDefault(u => u.Id == model.NotificationStatistics.TopSmsSenderIdInDay) ?.Email; model.SharedExamAttendance = examStatistics.Select(e => new KeyValuePair <string, int>(sharedExams[e.ExamId], e.GeneralAttendanceCount)); return(model); }