我有两页。第一页是菜单,第二页是数据。我在菜单中选择一个选项,触发一个异步方法,从数据库下载数据,然后显示在第2页。
在我看来,我必须选择如何实现这一点,我无法弄清楚哪一个更好。
选项1 - 类似这样的事情:
public void NavigateToPageTwo()
{
var myData = Task.Run(async () => { return await GetData(); }).Result;
Navigate(myData);
}
public async Task<MyData> GetData()
{
return await some method...
}
当用户盯着旋转轮时,运行GetData同步阻塞线程,然后当数据到达时移动到下一页并将数据作为参数传递或将其设置为某个静态字段并不重要什么都不做,直到数据到达。
选项2
public async void NavigateToPageTwo()
{
subscribe to an event here that will trigger when data arrives
await GetData();
}
public async Task GetData()
{
await some method...
fire an event after data has arrived
}
void OnEvent()
{
navigate to page two after the event has fired
}
哪种方法最适合这两种方法或者其他方式更好。谢谢。
答案 0 :(得分:0)
在任务
中使用Wait()选项public void NavigateToPageTwo()
{
var task = GetData();
task.Wait(); //Wait till finish the task
var myData = task.Result;
Navigate(myData);
}
public async Task<MyData> GetData()
{
return await some method...
}