Доступ к элементам списка между двумя решениями (C#, Asyn c) - PullRequest
0 голосов
/ 17 января 2020

У меня есть два решения:

Sol1 :

 public class Sol1{

  internal override IList<MenuItem> MenuItems
  {
   //some code
   GetItems();

   return items;
  }

  internal override async void GetItems()
  {
    //code
    //async method
    //code
    //async method
  }
 }

Первым решением является создание первого первого уровня меню. Затем в решении 2, после создания меню первого уровня, я хочу получить доступ к этим " items ".

Sol2 :

public class Sol2{

  private async Task SecondLev{
     //some code
   Sol1 sol1 = new Sol1();
   var test = sol1.items;
  }
}

Но они всегда пусты. Я не хочу запускать еще один метод времени MenuItems , но у меня есть доступ к этим элементам.

1 Ответ

4 голосов
/ 17 января 2020

Они пусты, потому что вы не ожидаете асинхронной операции c.

Ваш код должен выглядеть следующим образом:

    public class Sol1
    {
        internal IList<MenuItem> MenuItems { get; private set; }

        internal async Task GetItems()
        {
            // some async code
            // ...
            MenuItems = someResult;
        }
    }

    public class Sol2
    {
        private async Task SecondLevel()
        {
            //some code
            Sol1 sol1 = new Sol1();
            await sol1.GetItems();
            var test = sol1.MenuItems;
        }
    }

Несколько заметок:

  1. Не создавайте async void методы, если они не являются обработчиками событий, вместо этого используйте async Task.
  2. Вы не можете иметь свойства asyn c, только методы asyn c.
...