protected override async Task <T> CreateExportableCIAsync <T>() { var exportable = await base.CreateExportableCIAsync <T>(); var info = exportable as ExportableTournamentInfoCI; info.CategoryId = _categoryId?.ToString(); info.TournamentCoverage = _tournamentCoverage != null ? await _tournamentCoverage.ExportAsync().ConfigureAwait(false) : null; info.Competitors = _competitors?.Select(s => s.ToString()); info.CurrentSeasonInfo = _currentSeasonInfo != null ? await _currentSeasonInfo.ExportAsync().ConfigureAwait(false) : null; var groupsTasks = _groups?.Select(async g => await g.ExportAsync().ConfigureAwait(false)); info.Groups = groupsTasks != null ? await Task.WhenAll(groupsTasks) : null; info.ScheduleUrns = _scheduleUrns?.Select(s => s.ToString()).ToList(); info.Round = _round != null ? await _round.ExportAsync().ConfigureAwait(false) : null; info.Year = _year; info.TournamentInfoBasic = _tournamentInfoBasic != null ? await _tournamentInfoBasic.ExportAsync().ConfigureAwait(false) : null; info.ReferenceId = _referenceId?.ReferenceIds?.ToDictionary(r => r.Key, r => r.Value); info.SeasonCoverage = _seasonCoverage != null ? await _seasonCoverage.ExportAsync().ConfigureAwait(false) : null; info.Seasons = _seasons?.Select(s => s.ToString()).ToList(); info.LoadedSeasons = new List <CultureInfo>(_loadedSeasons ?? new List <CultureInfo>()); info.LoadedSchedules = new List <CultureInfo>(_loadedSchedules ?? new List <CultureInfo>()); info.CompetitorsReferences = _competitorsReferences?.ToDictionary(r => r.Key.ToString(), r => (IDictionary <string, string>)r.Value.ReferenceIds.ToDictionary(v => v.Key, v => v.Value)); info.ExhibitionGames = _exhibitionGames; return(exportable); }