Ожидание результатов от экземпляра класса, переданного методу в качестве параметра - PullRequest
0 голосов
/ 25 октября 2018

Это запутанный вопрос для меня, надеюсь описать его правильно.Это в проекте Xamarin.Android:

У меня есть такой класс (упрощенно):

    public class FinishedListener : Java.Lang.Object, IabHelper.IOnIabSetupFinishedListener
    {
      public IabResult Data { get; internal set; } = null;

      public void OnIabSetupFinished(IabResult res)
      {
        if (res != null) { Data = res; }
      }
    }

и метод вызова:

    public class Class1
    {
      public void Method1()
      {
        FinishedListener listner = new FinishedListener();
        SomeClass.Init(listner );
        // Do something with "listner.Data.Response"
      }
    }

Потому что Initкласс работает асинхронно, listner.Data не будет доступен сразу.

Какой лучший способ реализовать ожидание этого сценария?

1 Ответ

0 голосов
/ 25 октября 2018

Я не уверен, что ваш метод Init является ожидаемым, если предположить, что вы можете сделать что-то вроде этого;

 public async void Method1()
  {
    FinishedListener listner = new FinishedListener();
    await SomeClass.Init(listner);
    // Do something with "listner.Data.Response"
  }

В случае, если это нежелательно, сделайте следующее:

  public async void Method1()
  {
    FinishedListener listner = new FinishedListener();
    await Task.Run(()=>{ SomeClass.Init(listner); });  
    // Do something with "listner.Data.Response"
  }

Когда это выполнится, произойдет то, что ваш существующий компилятор будет ожидать выполнения await SomeClass.Init(listner);, а затем будет выполнена следующая строка.

...