异步,Azure和程序流

时间:2013-04-01 11:11:19

标签: azure asynchronous task azure-mobile-services

我在这个论坛上搜索了我的问题,但没找到任何合适的东西,我的程序流程有问题。

我在Azure上有一个MobileService,它有一个问题表,我的应用程序有一个主菜单和测验按钮,用户可以进入测验页面,在测验页面上我有一个开始测验按钮,显示第一个问题。列表。

这是我用来从数据库中获取问题的代码,我将它放在页面构造函数中,现在当用户按下测验按钮时,页面打开会有一个延迟,这不是很糟糕,因为它不是漫长的等待,只有几秒钟,还有更好的方法吗?

Task<IMobileServiceTable<Question>> getDataFromDatabase = new Task<IMobileServiceTable<Question>>(getQuestions);
getDataFromDatabase.Start();
QuestionList = await getDataFromDatabase;

在同一个函数中我有这个代码修改了开始测验按钮isEnabled属性。除非数据来自服务器,否则这将停止测验,但它不能一直工作,有时启动按钮isenabled设置为true,即使任务已完成,我也会从我的MobileServiceCollectionView QuestionList获得null引用。

Task<bool> assignData = new Task<bool>(assignTabletoitems);
assignData.Start();
startbutton.IsEnabled = await assignData;

对此有任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

您不必创建Task<T>的新实例来查询数据库(您没有提供在您的第一个代码段中使用的getQuestions的定义,所以我可以'告诉你代码是否正在做它应该做的事情。您通常要做的是从MobileServiceClient对象获取适当类型的表,然后查询它:

var client = new MobileServiceClient(appUrl, appKey);
var table = client.GetTable<Question>();
var questionList = await table.ToListAsync();

关于您的第二个代码段,如果没有assignTabletoitems的定义,很难知道您打算执行该代码的内容。