摘要: 简介 .NET 4包含新名称空间System.Threading.Tasks,它 包含的类抽象出了线程功能。 在后台使用ThreadPool。 任务表示应完成的某个单元的工作。 这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调线程。 使用任务不仅可以获得一个抽象层, 阅读全文
posted @ 2017-05-12 21:37 秋天的竹子 阅读(10994) 评论(0) 推荐(0) 编辑
摘要: C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用。具体而言,查询表达式将转换为以下名称的调用:Where、Select、SelectMany、Join、GroupJoin、OrderBy、OrderByDescending、ThenBy、ThenByDescending、GroupBy、Cast等等。   如同在前文中提到的用扩展方法和Lambda表达式简化LINQ查询表达式一般,这也是对查询表达式的一种转换。简化后的方法其实就是LINQ查询的实际执行。 阅读全文
posted @ 2017-05-12 21:10 秋天的竹子 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找、过滤等等常见的任务的时候,我们该如何去做呢?   我们可以自己写代码去对集合中的每个对象进行遍历,检查变量的每个字段看其是否满足条件。这样的故事已经发生太多次了,微软怎么可能容忍在C#里发生如此弱智的事情呢?于是,C#的设计者决定在C#中集成查询的语法,以最大限度地减少程序员书写类似代码的情况。   这也就是我们说的LINQ(Language Intergated Query)也就是语言集成查询,我们可以使用同样的语法访问不同的数据源。 阅读全文
posted @ 2017-05-12 20:54 秋天的竹子 阅读(398) 评论(1) 推荐(0) 编辑
摘要: 创建线程的一个简单方式是定义一个委托,并且异步调用它。委托是方法的类型安全的引用。Delegate类还支持异步地调用方法。在后台,Delegate类会创建一个执行任务的线程。 阅读全文
posted @ 2017-05-12 20:49 秋天的竹子 阅读(1216) 评论(0) 推荐(0) 编辑
摘要: 在C#中实现多线程的另一个方式是使用Parallel类。   在.NET4中 ,另一个新增的抽象线程是Parallel类 。这个类定义了并行的for和foreach的 静态方法。在为 for和 foreach定 义的语言中,循环从一个线程中运行 。Parallel类使用多个任务,因此使用多个线程来完成这个作业。   我们在前文中,对任务作出了一定的阐释,有兴趣的朋友可以前去查看。   Parallel.For()和 Parallel.ForEach()方法多次调用同一个方法,而 Parallel.Invoke()方法允许同时调用不同的方法。 阅读全文
posted @ 2017-05-12 20:06 秋天的竹子 阅读(2824) 评论(0) 推荐(0) 编辑
摘要: 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件、数据库、网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作。   这就可以使用线程来实现。   本文主要介绍关于Thread和ThreadPool的基础知识。 阅读全文
posted @ 2017-05-12 20:00 秋天的竹子 阅读(864) 评论(0) 推荐(0) 编辑
摘要: 关于协变和逆变要从面向对象继承说起。继承关系是指子类和父类之间的关系;子类从父类继承所以子类的实例也就是父类的实例。比如说Animal是父类,Dog是从Animal继承的子类;如果一个对象的类型是Dog,那么他必然是Animal。 协变逆变正是利用继承关系 对不同参数类型或返回值类型 的委托或者泛型接口之间做转变。 阅读全文
posted @ 2017-05-12 19:41 秋天的竹子 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 原文地址 如果你是一个C#程序员,那么本文介绍的10个C#常用代码片段一定会给你带来帮助,从底层的资源操作,到上层的UI应用,这些代码也许能给你的开发节省不少时间。以下是原文: 1 读取操作系统和CLR的版本 在我的Windows 7系统中,输出以下信息: 读取CPU数量,内存容量 可以通过Wind 阅读全文
posted @ 2017-05-12 19:25 秋天的竹子 阅读(1780) 评论(0) 推荐(0) 编辑
摘要: 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式。匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情)。匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托;如果是表达式树类型,则转换将计算以对象结构形式表示方法结构的表达式树。 阅读全文
posted @ 2017-05-12 19:01 秋天的竹子 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 上面这段代码主要实现了这样一个功能:通过Lambda表达式,在初始化对象实例的时候,为指定的属性赋值。 简单地说,上面的方法调用方式以及结果如下: DemoClass dc = new DemoClass (s => s.Name, “李四”); Console.WriteLine(dc.Name) 阅读全文
posted @ 2017-05-12 18:01 秋天的竹子 阅读(967) 评论(0) 推荐(0) 编辑