异步等待方法将在等待点阻止UI

时间:2019-05-08 14:24:20

标签: c# linq async-await

这是我的按钮事件:

private async void btnTarget_Click(object sender, EventArgs e)
{
    using (DataBaseDataContext db = new DataBaseDataContext())
    {
        targtGirdView.DataSource = await Task.Run(() =>
        {
            return heavyLinqToSQLQuery;
        });
    }
}

对于我的GridView数据源,我有一个繁重的数据库事务,将该事务放在await部分中。但是此时,UI会阻塞,我不知道原因。问题出在哪里?

2 个答案:

答案 0 :(得分:3)

您的LINQ查询应该是异步的。代码应该看起来像

private async void btnTarget_Click(object sender, EventArgs e)
{
    using (DataBaseDataContext db = new DataBaseDataContext())
    {
        targtGirdView.DataSource = await heavyLinqToSQLQuery.ToListAsync();
    }
}

答案 1 :(得分:3)

我刚刚通过在LINQ查询末尾添加.ToList();解决了我的问题:

private async void btnTarget_Click(object sender, EventArgs e)
{
    using (DataBaseDataContext db = new DataBaseDataContext())
    {
        targtGirdView.DataSource = await Task.Run(() =>
        {
            return heavyLinqToSQLQuery.ToList();
        });
    }
}

但是我不知道为什么它现在可以正常运行而没有阻塞UI。与延迟加载有关吗?