我有一个视图模型,它正在获取一行记录并显示在 Windows Phone UI 上。这个获取数据的视图模型方法正在执行大量任务,所有任务都标记为等待操作。
如下所示:
async Task GetData()
{
var dataCollection = await GetSomeData();
await DoThis();
await DoThat();
}
调用“DoThis”后,UI 将刷新。
现在我只是观察到,如果我在其他任务完成之前在代码中引入 Task.Delay,则 UI 会立即刷新。这是我最初的目标,在“GetSomeData”返回后立即刷新 UI,然后触发其他任务。
如下所示:
async Task GetData()
{
var dataCollection = await GetSomeData();
await Task.Delay(100);
await DoThis();
await DoThat();
}
所以我从中了解到的是,UI 线程在调用 Task.Delay 后有机会刷新。但是,如果没有 Task.Delay,如果调用 DoThis,则在找到“DoThis”中的第一个可等待方法之前会损失一些时间,以便它可以返回并继续 UI 刷新。
我的问题是:
- 我理解正确吗?
- 将其放入生产代码中安全吗?
预先感谢并希望我已经解释清楚了..
Pr
下面是这些方法的详细信息,如果没有这些方法,就不清楚程序中发生了什么。:(
async Task<ObservableCollection<MyModel>> GetSomeData()
{
return await Task.Run(() =>
{
using (var db = new MainModelDataContext())
{
List<MyModel> temp =
db.Models.Where(Some condition)
.Take(30)
.ToList();
var returnCollection = new ObservableCollection<MyModel>(temp);
return returnCollection;
}
}
ObservableCollection 绑定到 UI 页面上的列表控件。该方法由页面视图模型调用。
async Task DoThis()
{
// do some data processing and then post that to the Server
// this is the first awaitable method after the data processing
await (an HttpClientHandler).PostAsync();
}
任务 DoThat() 也遵循与 DoThis 相同的流程。数据处理也包含在异步等待任务中,它们只是处理一些类属性。
希望我说清楚了..再次感谢大家