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 ...
随机推荐
- 由<a href = "#" > 引发的思考
原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" > 的方式 绑定clic ...
- iOS pragma mark要使用
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 简单的来说 ...
- UVa 11069 - A Graph Problem
题目:给你一个集合{1,2,..,n},计算子集的个数,子集的元素不能相邻且不能再插入元素. 分析:dp,动态规划.相邻元素间仅仅能相差3或者2. 动态方程:f(k)= f(k-2)+ f(k-3): ...
- poj2112 Optimal Milking --- 最大流量,二分法
nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...
- 每天进步一点点-->函数fseek() 使用方法
在阅读代码时,遇到了非常早之前用过的fseek(),非常久没实用了,有点陌生,写出来以便下次查阅. 函数功能是把文件指针指向文件的开头,须要包括头文件stdio.h fseek 函数名: fsee ...
- 右键菜单中的好友列表Ajax直接跳转请求到登陆页面
今天,我们正在做正确的菜单.当点击重命名Ajax要求,并且不发送数据的背景,但直接跳到主页. 我百思不得其解,后来我发现在头版的一个问题: <li><a href='#' oncli ...
- T-SQL技巧收集——拆分字符串
原文:T-SQL技巧收集--拆分字符串 在开发中,很多时候都需要处理拆分字符串的操作.下面收集了几种方法供大家分享,其中的逗号可以改为多种有需要的符号,但是不能针对多种符号同时存在的例子.有待各位补充 ...
- Android系统关机或几种方式重启
---------------------------------------------------------------------------------------------------- ...
- Appium - iOS Mac环境结构
Appium - iOS Mac环境结构 笔者: Max.Bai 时间: 2014/10 1. iOS开发环境的搭建 1.1系统要求 MacOS X 10.7 or higher, 10.9.2 re ...
- 理解Android虚拟机体系结构(转)
1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...