等待task.delay有助于UI刷新快,但如何?(await task.delay helps i

2019-10-20 15:15发布

我有一个获取的记录行显示在Windows Phone UI ..这取数据做了很多这任务视图模型方法在视图模型中,所有标有等待操作方法。

看起来象下面这样:

async Task GetData()
{

    var dataCollection = await GetSomeData();
    await DoThis();
    await DoThat();
}

在“DoThis”呼叫调用之后的UI刷新。 现在,我只是认为,如果我在代码中引入Task.Delay完成其他任务之前,用户界面是立即刷新..这是我原来的目标,之后“GetSomeData”返回立即刷新UI再火的其他任务。

看起来象下面这样:

async Task GetData()
{
    var dataCollection = await GetSomeData();
    await Task.Delay(100);
    await DoThis();
    await DoThat();
}

所以我从这个理解,就是UI线程得到机会Task.Delay呼叫作出后刷新。 但是没有Task.Delay,如果DoThis被调用,一些时间,找到的第一个awaitable方法之前在“DoThis”,以便它可以返回,并继续与UI刷新丢失。

我的问题是:

  1. 有我的理解是正确的吗?
  2. 它是安全的把这个产品代码?

在此先感谢,并希望我已经解释清楚..

下面是这些方法的细节没有那些目前尚不清楚什么是在程序去.. :(

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();
}

任务找时间做()也遵循相同的流程DoThis ..的数据处理也被包裹在异步-等待任务,并且它们只是工作的一些类的属性。

希望我清楚..再次感谢所有

Answer 1:

当你调用Task.Delay ,你将控制返回到那些100毫秒的UI消息循环,并且UI消息循环有机会从队列中处理更多的消息。 这就是为什么你所遇到的“提神”效果。 如果您GetSomeData方法是忠实地异步的,你的UI应当在其操作过程中保持响应,并在结束时,将继续执行下一个await

如果这种效应不发生,那么这意味着你的方法是不是真的异步 ,它更有可能的是,他们正在运行在阻止你的UI线程同步的时尚昂贵的操作。

把这个投入生产之前,你要考虑你为什么需要Task.Delay刷新UI。



文章来源: await task.delay helps in UI refresh faster, but how?