1. 注意 Task 执行的顺序。

如下代码:

             IQueryable<T> querySet;
if (preConditionExpression == null)
{
querySet = Table; // 原来是 TableWhereUnDeleted
}
else
{
querySet = Table.Where(preConditionExpression); //原来是 TableWhereUnDeleted.Where(preConditionExpression);
}
if (conditionCombined != null && condition != null)
{
querySet = conditionCombined(querySet, condition);
}
int recordCount = await querySet.CountAsync();
querySet = SkipAndTakeInternal(querySet, skip, take, orderKeySelector);
var list = await querySet.ToListAsync();
return new LightPagedList<T>()
{
DataList = list,
RecordCount = recordCount
};

这个方法有一个问题,就是第 15 行没有 await,这样执行的时候有一个 BUG,其实第 14 行和第 15 行几乎是同时执行,虽然第 14 行有一个 await,但仅仅是把第 14 行的返回值赋值给 int recordCount,而第 15 行同时执行了,导致最终 LightPagedLIst 的 DataList 为 NULL。

还有一个问题,切记不要把 LightPagedList 放到匿名方法体以内,那样  LightPagedList  始终得不到值。

推荐如下代码:

             IQueryable<T> querySet;
if (preConditionExpression == null)
{
querySet = Table; // 原来是 TableWhereUnDeleted
}
else
{
querySet = Table.Where(preConditionExpression); //原来是 TableWhereUnDeleted.Where(preConditionExpression);
}
if (conditionCombined != null && condition != null)
{
querySet = conditionCombined(querySet, condition);
}
LightPagedList<T> result = new LightPagedList<T>();
Task<int> task1 = querySet.CountAsync();
result.RecordCount = await task1;
Task<IQueryable<T>> task2 = task1.ContinueWith<IQueryable<T>>(t =>
{
return SkipAndTakeInternal(querySet, skip, take, orderKeySelector);
});
result.DataList = await task2.ContinueWith(t =>
{
return t.Result.ToListAsync();
}).Result;
return result;

谢谢浏览!

最新文章

  1. PostgreSQL 允许远程访问设置方法
  2. js获取当前域名及获取页面完整地址并做判断
  3. MongoDB配置多个ConfigDB的问题(笔记)
  4. javascript笔记1-基本概念
  5. Android用AutoCompleteTextView实现搜索历史记录提示
  6. Android基础学习之context
  7. response.getWriter().write()与out.print()的区别 (转)
  8. 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV
  9. 使用Java语言开发微信公众平台(四)——图文消息的发送与响应
  10. Ultimus BPM 房地产与建筑行业应用解决方案
  11. BASH 学习笔记小结
  12. JavaScript 对象分类
  13. 4.29 初始mysql
  14. datetimepicker 使用
  15. JavaScript 数组去重方法总结
  16. 最近在研究syslog日志,就说一下syslog格式吧
  17. C#退出窗体的总结方法
  18. Py&#39;t&#39;hon之csv,ini&amp;序列化,反序列化
  19. IE6条件下的bug与常见的bug及其解决方法
  20. Java泛型:List&lt;?&gt;与List的区别

热门文章

  1. Python项目中使用配置文件
  2. SAP 公司间STO场景中外向交货单过账后自动触发内向交货单功能的实现
  3. maven 学习---部署基于Maven的war文件到Tomcat
  4. 详解Vue的slot新用法
  5. java 并发编程面试题及答案
  6. Linux下对input设备调用ioctl时指定EVIOCGBIT选项时的缓冲区该多大【转】
  7. 语义分析的waf 目前就看到长亭 机器学习的waf有fortnet 阿里云的waf也算
  8. Linux 动态链接库路径 LD_LIBRARY_PATH
  9. 201871010104-陈园园 《面向对象程序设计(java)》第七周学习总结
  10. SQL-on-Hadoop 技术