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要好。
下面我们实现一个异步调用的例子,看看用法有什么不同。
我想要的是:异步执行方法,在方法执行后紧接着异步执行另一个方法,该方法以前面的方法结果为参数
![](https://common.cnblogs.com/images/copycode.gif)
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;
} }
}
![](https://common.cnblogs.com/images/copycode.gif)
可以对比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为例
![](https://common.cnblogs.com/images/copycode.gif)
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.
}
}
}
![](https://common.cnblogs.com/images/copycode.gif)
ForEach、Invoke类似
Parallel.ForEach(new[] {1, 2, 3, 4, 5},
i =>
Console.WriteLine("{0}, Task: {1}, Thread {2}", i, Task.CurrentId,
Thread.CurrentThread.ManagedThreadId));
![](https://common.cnblogs.com/images/copycode.gif)
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);
}
);
![](https://common.cnblogs.com/images/copycode.gif)
最后:关于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 ...
随机推荐
- 排序算法门外汉理解-Shell排序
#include <stdio.h> /* 希尔排序 基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化. (外部分组gap,组内部插入排序! ! ) 特点:一种不稳定的排序 */ ...
- 2013成都邀请赛J称号||HDU4725 The Shortest Path in Nya Graph(spfa+slf最短的优化)
职务地址:HDU 4725 这题卡了好长时间了,建图倒是会建,可是不会最短路的算法优化,本以为都须要堆去优化的,打算学了堆之后再来优化.可是昨晚CF的一道题..(那题也是不优化过不了..)然后我就知道 ...
- Android client和服务器JSP互传中国
出于兼容性简化.传统中国等多国语言.推荐使用UTF-8编码. 首选.我们期待Android到底应该怎么办: 在发送前,应该对參数值要进行UTF-8编码,我写了一个static的 转换函数.在做发送动作 ...
- ajaxFileUpload+struts2多文件上传(动态添加文件上传框)
上一篇文章http://blog.csdn.net/itmyhome1990/article/details/36396291介绍了ajaxfileupload实现多文件上传, 但仅仅是固定的文件个数 ...
- Android ImageView分析并展开
版本号:1.0 日期:2014.6.11 2014.6.12 版权:© 2014 kince 转载注明出处 ImageView是开发中经常使用到的一个控件,也能够说是不可缺少的. 对于它的使用. ...
- Cocos2d-X中实现批处理精灵
使用普通方法实现批处理精灵 在Sprite.h中加入以下的代码 #ifndef __Sprite_SCENE_H__ #define __Sprite_SCENE_H__ #include " ...
- Teams(uva11609+组合)
I - Teams Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit cid=7795 ...
- 世界上速度最快的输入法 Fleksy 为了支持中国
在 Windows Phone 8.1 内置 Word Flow 宣布取得世界最快输入记录后仅几天就打破的 Fleksy 開始測试中文支持了. 总算有一次创新的输入模式里,中文不是被落下的那个.Fle ...
- mapxtreme C# 完美车辆动态轨迹展示
演示程序请在 http://pan.baidu.com/s/1jG9gKMM#dir/path=%2F%E4%BA%A7%E5%93%81%2FDemos 找 Trajectory.rar 轨迹回放功 ...
- LeetCode :: Insertion Sort List [具体分析]
Sort a linked list using insertion sort. 仍然是一个很简洁的题目,让我们用插入排序给链表排序:这里说到插入排序.能够来回想一下, 最主要的入门排序算法.就是插入 ...