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;

谢谢浏览!

Task 小记的更多相关文章

  1. 编剧小记 — Contour

    前言 Contour 是一款比较优秀的编剧辅助软件,按理说这篇文章应该归类到mac小记中,但其操作非常简单,基本上以写作提示为主.只怪所有提示都是英语,而且很多,每次使用打开 Contour 个别单词 ...

  2. 使用Maven自动部署Java Web项目到Tomcat问题小记

    导读 首先说说自己为啥要用maven管理项目,一个直接的原因是:我在自己电脑上开发web项目,每次部署到服务器上时都要经历如下步骤: 首先在Eclipse里将项目打包成war包 将服务器上原来的项目文 ...

  3. WPF ControllTemplate Triggers小记 - 简书

    原文:WPF ControllTemplate Triggers小记 - 简书 WPF中,样式模板中如果定义EventTrigger事件方式实现动画.那么需要注意两点: 1.对于绑定的属性的Event ...

  4. ConCurrent in Practice小记 (4)

    ConCurrent in Practice小记 (4) Executors Callable && Future <T> Callable:此接口有一个call()方法. ...

  5. Concepts:Request 和 Task

    当SQL Server Engine 接收到Session发出的Request时,SQL Server OS将Request和Task绑定,并为Task分配一个Workder.在TSQL Query执 ...

  6. .Net多线程编程—任务Task

    1 System.Threading.Tasks.Task简介 一个Task表示一个异步操作,Task的创建和执行是独立的. 只读属性: 返回值 名称 说明 object AsyncState 表示在 ...

  7. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  8. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  9. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

随机推荐

  1. csp 201809-1卖菜

    问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商 ...

  2. MQ 分布式事务 -- 微服务应用

    1.背景 友情链接:https://www.cnblogs.com/Agui520/p/11187972.html https://blog.csdn.net/fd2025/article/detai ...

  3. vue3.0和2.0的区别,Vue-cli3.0于 8月11日正式发布,更快、更小、更易维护、更易于原生、让开发者更轻松

    vue3.0和2.0的区别Vue-cli3.0于 8月11日正式发布,看了下评论,兼容性不是很好,命令有不少变化,不是特别的乐观vue3.0 的发布与 vue2.0 相比,优势主要体现在:更快.更小. ...

  4. Vue计算属性computed的全面解析

    前言 一直以来对computed这个计算属性都只停在一个大概的认知中,最近特意仔细研读相关资料,亲测后逐渐了解了其特性. 正文 computed 特点: 1.初始化/依赖属性(即data属性)改变时执 ...

  5. Java打印9*9乘法表

    废话不多说直接贴代码, 先放一个标准的正三角形状的 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System ...

  6. SQL中的视图(极客时间)

    视图 视图也就是虚拟表, 本身不具备数据, 是SQL中的一个变红要概念. 如图 视图可以帮助我们使用表的一部分, 而不是所有的表, 另一方面可以针对不同的用户制定不同的查询视图. 创建, 更新与删除视 ...

  7. Fundebug前端异常监控插件更新至 1.9.0,支持监控 HTTP 慢请求

    摘要: 1.9.0新增 httpTimeout 配置选项,支持监控 HTTP 慢请求,同时修复了记录的 HTTP 响应时间偏小的 BUG. Fundebug提供专业的前端异常监控服务,可以第一时间捕获 ...

  8. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  9. Java内存模型。

    Java内存模型: 准备知识:缓存,缓存一致性,硬件缓冲区:写缓冲区.无效化队列,内存重排序,内存屏障. 1.Java内存模型概念. 首先,在并发的情况下,计算机系统必须解决这样两个问题:第一,一个处 ...

  10. Windows Server 2016-Hyper-V Replica副本功能介绍

    Hyper-V副本是一种可用于复制虚拟机的功能,作为业务连续性解决方案的一部分.从Windows Server 2012中,Hyper-V角色引入了Hyper-V Replica作为虚拟机的内置复制机 ...