Я разрабатываю приложение Xamarin Forms, но я не думаю, что мой вопрос задан Xamarin. После того, как пользователь вводит пин-код (конечно, только если PIN-код правильный), я покажу ему вкладку. На каждой из этих страниц есть некоторые элементы управления, но что более важно, каждый из них должен извлекать некоторые данные из Интернета, используя асинхронные вызовы. Теперь, поскольку мое приложение имеет несколько вкладок, я хочу получить все данные для каждого из них параллельно (не последовательно). Что я реализовал до сих пор, это:Как подготовить данные приложения в фоновом режиме?
public MainTabbedPage(bool requirePin)
{
if (requirePin)
{
Navigation.PushModalAsync(new PinEntryPage(this));
}
InitializeComponent();
}
public void InitializeChildren()
{
try
{
var page1 = new Page1();
page1.RefreshData();
var page2 = new Page2();
page2.RefreshButtons();
page2.RefreshData();
var page3 = new Page3();
page3.RefreshData();
Children.Add(page1);
Children.Add(page2);
Children.Add(page3);
}
catch (Exception ex)
{
// some error handling...
}
}
пока все RefreshData()
и RefreshButtons()
выглядеть следующим образом:
public void RefreshData()
{
Task.Run(
() =>
{
var data = ApiSingleton.Instance.GetData().Result;
// some data manipulations
Device.BeginInvokeOnMainThread(() => /* some UI manipulation*/);
}
});
}
Теперь, в то время как это, кажется, делает правильно, интересно, если это правильно способ сделать это, а если нет, то что?
'GetData()' похоже на задачу. Таким образом, вы можете просто ждать его результата после создания асинхронизации 'RefreshData'. Нет необходимости в 'Task.Run()' there imo – lokusking
'GetData()' выглядит как метод async (так как вы касаетесь 'Result'), так почему бы не сделать всю цепочку правильно асинхронной, а не бросать задачи? –
Это асинхронно, спасибо. Кстати, это означает, что мне не нужно 'Device.BeginInvokeOnMainThread', правильно? – nicks