C#5.0新特性
C#5.0新特性
C#5.0最大的新特性,莫过于Async和Parallel。
以往我们为了让用户界面保持相应,我们可以直接使用异步委托或是System.Threading命名空间中的成员,但System.Threading.Tasks命名空间提供了一种更加简洁的方法---使用Task类。Task类可以轻松地在次线程中调用方法,可以作为异步委托的简单替代品。
关于Async,可以参考MSDN的Task 类以及使用 Async 和 Await 的异步编程(C# 和 Visual Basic),其介绍了其中的方法、属性等,讲的都比LZ要好。
下面我们实现一个异步调用的例子,看看用法有什么不同。
我想要的是:异步执行方法,在方法执行后紧接着异步执行另一个方法,该方法以前面的方法结果为参数

using System;
using System.Threading.Tasks;
//异步执行方法,在方法执行后紧接着异步执行另一个方法,该方法以前面的方法结果为参数
namespace AsyncTask
{
class result
{
public int number { set; get; }
}
class Program
{
static void Main(string[] args)
{
var result = new result { number = 4 };
var t1 = new Task(First, result);//Action
var t2 = t1.ContinueWith<int>(First1);//Func
var t3 = t1.ContinueWith<int>(First2);
t1.Start();
Console.WriteLine(t2.Result);//t.Result
Console.WriteLine(t3.Result);
Console.ReadKey();
} static void First(object o)
{
result x = (result)o;
x.number *= 2;
} static int First1(Task o)
{
result x = (result)o.AsyncState;//
return x.number * x.number;
} static int First2(Task o)
{
result x = (result)o.AsyncState;
return x.number * x.number * x.number;
} }
}

可以对比DebugLZQ的.NET异步编程总结----四种实现模式,看看同样为异步,实现方法有什么不同。
关于Parallel,现在双核(多核)的计算机已经很普片,计算机有多个CPU,就能够以并行的方式执行线程,这将大大改善应用程序的运行时性能。
总体而言,System.Threading.Tasks中的类型(以及System.Threading中的一些相关类型)被称为任务并行库(Task Parallel Library,TPL)。TPL使用CLR线程池自动将应用程序的工作动态分配到可用的CPU中。TPL还处理工作分区、线程调度、状态管理和其他低级别的细节操作。TPL中最重要的类是System.Threading.Tasks.Parallel,它提供大量的方法,能够以并行的方式迭代数据集合(实现了IEnumberable<T>的对象)。该类支持两个主要的静态方法---Parallel.For()和Parallel.ForEach() (Parallel.Invoke())每个方法都有很多的重载版本。
MSDN Parallel 类、.NET Framework 中的并行编程 可以参考,以For为例

using System.Threading.Tasks; namespace ParallelFor
{
class Test
{
static int N = 1000; static void TestMethod()
{
// Using a named method.
Parallel.For(0, N, Method2); // Using an anonymous method.
Parallel.For(0, N, delegate(int i)
{
// Do Work.
}); // Using a lambda expression.
Parallel.For(0, N, i =>
{
// Do Work.
});
} static void Method2(int i)
{
// Do work.
}
}
}

ForEach、Invoke类似
Parallel.ForEach(new[] {1, 2, 3, 4, 5},
i =>
Console.WriteLine("{0}, Task: {1}, Thread {2}", i, Task.CurrentId,
Thread.CurrentThread.ManagedThreadId));

Parallel.Invoke(
BasicAction, // Param #0 - static method
() => // Param #1 - lambda expression
{
Console.WriteLine("Method=beta, Thread={0}", Thread.CurrentThread.ManagedThreadId);
},
delegate() // Param #2 - in-line delegate
{
Console.WriteLine("Method=gamma, Thread={0}", Thread.CurrentThread.ManagedThreadId);
}
);

最后:关于Parallel和Async不是LZ一篇博文就能解释的清楚,LZ没有实际的用过,不敢说咋滴咋滴...博文是个人的理解,难免出现纰漏,欢迎批评指正!关于学习方面,中文的书籍普遍比较滞后,针对个人的需求并非所有的英文书籍都有翻译版,加之翻译者个人理解及翻译风格的原因,最终...
关于新书,公司给买了本:

书比较厚,1k来页,英文的书籍看起来比较慢,但是看起来很舒服。
C#5.0新特性的更多相关文章
- 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?
来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...
- Java基础和JDK5.0新特性
Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...
- Visual Studio 2015速递(1)——C#6.0新特性怎么用
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性 1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...
- 背水一战 Windows 10 (1) - C# 6.0 新特性
[源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...
- C# 7.0 新特性2: 本地方法
本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C# 7.0 新特性1: 基于Tuple的“多”返回值方法
本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...
- C# 7.0 新特性3: 模式匹配
本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...
- C# 7.0 新特性4: 返回引用
本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C#发展历程以及C#6.0新特性
一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...
随机推荐
- 学校oj平台上不去
学校oj平台上不去,我的作业咋办啊
- HDFS 上传文件的不平衡,Balancer问题是过慢
至HDFS上传文件.假定从datanode开始上传文件,上传的数据将导致目前的当务之急是全datanode圆盘.这是一个分布式程序的执行是非常不利. 解决方案: 1.从其他非datanode节点上传 ...
- bzoj 3333: 排队计划 解决问题的方法
[原标题] 3333: 排队计划 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 161 Solved: 71 [Submit][Status] D ...
- design pattern Builder 生成器设计模式
其实设计模式可以学习很有趣,你并不需要有这么难啃旱地FOG对我来说,当然,这些都是健康的骨骼啃啃. 在本文中,建造者模式设计一个搞笑的一幕.根据这一模型来学习功夫的方法,哈哈. 基类的第一,设计.那么 ...
- 关于int全区变量读写的原子性
关于int全区变量读写的原子性 关于int变量的读写是否原子性网上有非常多讨论,貌似不同平台不同,这里自己做实如今arm9平台測试.这里要注意原子性并不是指一条汇编才原子,实际上即使一次赋值编 ...
- Partitioner分区过程分析
Partition中国人意味着分区,意义的碎片,这个阶段也是整个MapReduce该过程的第三阶段.在Map返回任务,是使key分到通过一定的分区算法.分到固定的区域中.给不同的Reduce做处理,达 ...
- jquery :操作iframe
原文 jquery :操作iframe 1. 内容里有两个ifame <iframe id="leftiframe"...</iframe> <iframe ...
- Run Book Automation - RBA系统介绍
什么是RBA系统? 介绍这个系统之前, 先介绍一下开发这个系统的公司. BMC BMC软件公司是全球率先的业务服务管理解决方式的开发及供应商,现为全球第六大独立软件公司. 通过帮助用户主动提升服务.降 ...
- ocp认证考试指南第一章
数据库存储结构: 物理数据库存储结构: 必须的三类文件: 控制文件(controlFile):multiplexing the controfile 多路复用控制文件,指向其它关键文件,存储序列号和时 ...
- hexo 部署至Git遇到的坑
查找资料的时候发现了next这个博客主题,next!非常的漂亮,顺手查看了hexo的相关部署. Hexo官方介绍 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲 ...