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. Lucene queryParser和analysis有什么不同?

    在Lucene1.4.3中,queryParser和analysis分成独立的两个包,queryParser作用是解析查询语句,analysis作用是分词,queryParser在解析查询语句的时候会 ...

  2. EurekaServer自动装配及启动流程解析

    在开始本篇文章之前,我想你对SpringCloud和SpringBoot的基本使用已经比较熟悉了,如果不熟悉的话可以参考我之前写过的文章 本篇文章的源码基于SpringBoot2.0,SpringCl ...

  3. maven 学习---使用Maven运行单元测试

    要通过Maven运行单元测试,发出此命令: mvn test 这会在你的项目中运行整个单元测试. 案例学习 创建两个单元测试,并通过 Maven 的运行它.参见一个简单的 Java 测试类: pack ...

  4. linux7系统进入单用户模式

    1.重启系统,在出现选择内核界面的时候按“e”键 2.移动光标到红色找到LANG=zh_CN.UTF-8 增加“init=/sysroot/bin/sh” 修改后如下图 3.使用"ctrl+ ...

  5. ubuntu 16.04中limit 修改

    第一,修改/etc/security/limits.conf: * soft nproc 65535* hard nproc 65535* soft nofile 65535* hard nofile ...

  6. Flask请求和应用上下文源码分析

      flask的request和session设置方式比较新颖,如果没有这种方式,那么就只能通过参数的传递. flask是如何做的呢? 1:本地线程,保证即使是多个线程,自己的值也是互相隔离 1 im ...

  7. 模仿51cto搜索框

    做这个demo遇见的问题 1==>input type=submit有默认样式 padding:1px 6px所以将他去除 2==>input submit有默认样式 去除默认边框 bor ...

  8. 201871010136-赵艳强《面向对象程序设计(Java)》第八周学习总结

    201871010136-赵艳强<面向对象程序设计(Java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  9. Appium+python自动化(三)- SDK Manager(超详解)

    简介 本来宏哥一开始打算用真机做的,所以在前边搭建环境时候就没有下载SDK,但是由于许多小伙伴通过博客发短消息给宏哥留言说是没有真机,所以顺应民意整理一下模拟器,毕竟“得民心者,得天下”.SDK顾名思 ...

  10. 部署ComsenzDiscuz BBS论坛系统

    1.准备环节 [root@localhost ~]# unzip ComsenzDiscuz-DiscuzX-master.zip //解包 [root@localhost ~]# cd Discuz ...