首页 新闻 会员 周边 捐助

async await疑问

0
[已解决问题] 解决于 2019-07-24 08:52

public async Task<PagerModel<ResultModel>> GetList()
{
PagerModel<ResultModel> result = new PagerModel<ResultModel>();

        sql = "";
        sqlCount = "";

        using (IDbConnection connection = ConnectionManager.OpenConnection())
        {                
            var temp = await connection.QueryAsync<ResultModel>(sql);
            result.TotalCount = await connection.ExecuteScalarAsync<int>(sqlCount);
            result.PagerList = temp.Distinct().ToList();
            result.TotalPageCount = (int)Math.Ceiling((double)result.TotalCount / pageSize);

            connection.Close();
            connection.Dispose();
        }
        return result;
    }

请问上面代码为什么不异步执行呢,两个异步方法每个在300 -400ms,现在接口监测耗时共900ms左右。该怎么写呢,万分感谢!

去海边生活的主页 去海边生活 | 初学一级 | 园豆:66
提问于:2019-07-23 14:37

有人吗

去海边生活 5年前
< >
分享
最佳答案
1
var tempTask = connection1.QueryAsync<ResultModel>(sql);
var totalTask = connection2.ExecuteScalarAsync<int>(sqlCount);

await Task.WhenAll(temtask,totaltask);

result.TotalCount=totalTask .result;
result.PagerList=tempTask.result;
奖励园豆:5
czd890 | 专家六级 |园豆:14488 | 2019-07-23 17:46

谢谢,你这个看着就靠谱。现在开了两个线程 然后WaitAll,没你这种简洁。我问的问题那种写法会并行执行嘛

去海边生活 | 园豆:66 (初学一级) | 2019-07-23 17:54

@去海边生活:
var temp = await connection.QueryAsync<ResultModel>(sql);
result.TotalCount = await connection.ExecuteScalarAsync<int>(sqlCount);
你说这种呀,自然不会呀,得等QueryAsync完成后,才执行ExecuteScalarAsync呀。不然await有什么用了,对不

czd890 | 园豆:14488 (专家六级) | 2019-07-23 18:00

@czd890: 谢谢

去海边生活 | 园豆:66 (初学一级) | 2019-07-23 18:22

大神啊,sql加了group by,sql查询器会很快 大概400ms,代码执行会超级慢 4.5s左右。dapper,mysql5.6.您有遇到相关问题吗

去海边生活 | 园豆:66 (初学一级) | 2019-08-05 11:36
其他回答(2)
0

async await 碰到 await 就同步执行了,这个要谨记。

gt1987 | 园豆:1150 (小虾三级) | 2019-07-25 09:11

好的 谢谢

支持(0) 反对(0) 去海边生活 | 园豆:66 (初学一级) | 2019-08-05 11:37
0
kiba518 | 园豆:189 (初学一级) | 2019-07-30 09:51

谢谢

支持(0) 反对(0) 去海边生活 | 园豆:66 (初学一级) | 2019-08-05 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册