Получение коллекции из ассинхронного вызова - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть классы, с помощью которых парсится json файл
    public class SampleDataItem
    {
        public SampleDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content)
        {
            this.UniqueId = uniqueId;
            this.Title = title;
            this.Subtitle = subtitle;
            this.Description = description;
            this.ImagePath = imagePath;
            this.Content = content;
        }
 
        public string UniqueId { get; private set; }
        public string Title { get; private set; }
        public string Subtitle { get; private set; }
        public string Description { get; private set; }
        public string ImagePath { get; private set; }
        public string Content { get; private set; }
 
        public override string ToString()
        {
            return this.Title;
        }
    }
 
    public class SampleDataGroup
    {
        public SampleDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description)
        {
            this.UniqueId = uniqueId;
            this.Title = title;
            this.Subtitle = subtitle;
            this.Description = description;
            this.ImagePath = imagePath;
            this.Items = new ObservableCollection<SampleDataItem>();
        }
 
        public string UniqueId { get; private set; }
        public string Title { get; private set; }
        public string Subtitle { get; private set; }
        public string Description { get; private set; }
        public string ImagePath { get; private set; }
        public ObservableCollection<SampleDataItem> Items { get; private set; }
 
        public override string ToString()
        {
            return this.Title;
        }
    }
 
    public sealed class SampleDataSource
    {
        private static SampleDataSource _sampleDataSource = new SampleDataSource();
 
        private ObservableCollection<SampleDataGroup> _groups = new ObservableCollection<SampleDataGroup>();
 
        private static AssetManager _asset = null;
 
        public static AssetManager Asset
        {
            get { return SampleDataSource._asset; }
            set { SampleDataSource._asset = value; }
        }
 
        public ObservableCollection<SampleDataGroup> Groups
        {
            get { return this._groups; }
        }
 
        public static async Task<IEnumerable<SampleDataGroup>> GetGroupsAsync()
        {
            await _sampleDataSource.GetSampleDataAsync();
 
            return _sampleDataSource.Groups;
        }
 
        public static async Task<SampleDataGroup> GetGroupAsync(string uniqueId)
        {
            await _sampleDataSource.GetSampleDataAsync();
            // Для небольших наборов данных можно использовать простой линейный поиск
            var matches = _sampleDataSource.Groups.Where((group) => group.UniqueId.Equals(uniqueId));
            if (matches.Count() == 1) return matches.First();
            return null;
        }
 
        public static async Task<SampleDataItem> GetItemAsync(string uniqueId)
        {
            await _sampleDataSource.GetSampleDataAsync();
            // Для небольших наборов данных можно использовать простой линейный поиск
            var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));
            if (matches.Count() == 1) return matches.First();
            return null;
        }
 
        private async Task GetSampleDataAsync()
        {
            if (this._groups.Count != 0) return;
 
            StreamReader strm = new StreamReader(Asset.Open("SampleData.json"));
            string jsonText = await strm.ReadToEndAsync();
 
            JSONObject jsonObject = new JSONObject(jsonText);
            JSONArray jsonArray = jsonObject.GetJSONArray("Groups");
 
            for (int i = 0; i < jsonArray.Length(); i++)
            {
                JSONObject groupObject = jsonArray.GetJSONObject(i);
                SampleDataGroup group = new SampleDataGroup(groupObject.GetString("UniqueId"),
                                                                groupObject.GetString("Title"),
                                                                groupObject.GetString("Subtitle"),
                                                                groupObject.GetString("ImagePath"),
                                                                groupObject.GetString("Description"));
 
                JSONArray jsonArrayItems = groupObject.GetJSONArray("Items");
 
                for (int j = 0; j < jsonArrayItems.Length(); j++)
                {
                    JSONObject itemObject = jsonArrayItems.GetJSONObject(j);
                    group.Items.Add(new SampleDataItem(itemObject.GetString("UniqueId"),
                                                            itemObject.GetString("Title"),
                                                            itemObject.GetString("Subtitle"),
                                                            itemObject.GetString("ImagePath"),
                                                            itemObject.GetString("Description"),
                                                            itemObject.GetString("Content")));
                }
 
                this.Groups.Add(group);
            }
  
        }
    }
Подскажите, как теперь правильно получить коллекцию данных? Пытаюсь так, но не знаю, как дальше извлекать данные (например, переменной задать заголовок string Title = groups[0].Title)
Task<IEnumerable<SampleDataGroup>> groups = SampleDataSource.GetGroupsAsync();
Думаю, что вообще не правильно осуществляю асинхронный вызов. Хотя данные в переменную заполняются(см рисунок).

Решение задачи: «Получение коллекции из ассинхронного вызова»

textual
Листинг программы
IEnumerable<SampleDataGroup> groups = await SampleDataSource.GetGroupsAsync();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы