C# 任务并行库使用小计 z
1.简单创建使用
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
try
{
/*
* Task 类还提供了初始化任务但不计划执行任务的构造函数。
* 出于性能方面的考虑,TaskFactory 的 StartNew 方法应该是创建和计划计算任务的首选机制,但是对于创建和计划必须分开的情况,
* 可以使用构造函数,然后可以使用任务的 Start 方法计划任务在稍后执行。
* 对于返回值的操作,应使用 Task<TResult> 类。————MSDN
*/
Task _task = new Task(() => { Console.WriteLine("my frist Task."); });
_task.Start();
Task _taskFactory = Task.Factory.StartNew(() => { Console.WriteLine("my frist Task by Factory."); });
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));
}
finally
{
Console.ReadLine();
}
}
}
}
代码效果
2.Task处理返回值
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
try
{
Task<string> _task = Task<string>.Factory.StartNew(() =>
{
string _guid = System.Guid.NewGuid().ToString();
Console.WriteLine(string.Format("Pass Value:{0}", _guid));
return _guid;
});
Console.WriteLine(string.Format("Task Return Value:{0}", _task.Result));
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));
}
finally
{
Console.ReadLine();
}
}
}
}
代码效果
3.Task 任务延续
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
try
{
/*
* 使用 Task.ContinueWith 方法和 Task<TResult>.ContinueWith 方法,可以指定在前面的任务完成时要启动的任务。
* 延续任务的委托中将传入对前面的任务的引用,以便它可以检查其状态。
* 此外,可以在 Result 属性中将用户定义的值从前面的任务传递到其延续任务,
* 以便前面的任务的输出可以作为延续任务的输入。————MSDN
*/
Task<string> _task = Task<string>.Factory.StartNew(() =>
{
string _guid = "_task";
Console.WriteLine(_guid);
return _guid;
}).ContinueWith<string>((guid) =>
{
string _guid = "_task ContinueWith";
Console.WriteLine(string.Format("ContinueWith Task {0}", guid.Result));
return _guid;
});
Console.WriteLine(string.Format("Task Return Value:{0}", _task.Result));
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));
}
finally
{
Console.ReadLine();
}
}
}
}
代码效果
4.分离的嵌套任务
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
try
{
/*
* 如果在任务中运行的用户代码创建一个新任务,
* 且未指定 AttachedToParent 选项,则该新任务不采用任何特殊方式与外部任务同步。
* 此类任务称为“分离的嵌套任务”。 ————MSDN
* 说明:下面例子也来自于MSDN
* 其实意思就是父任务不会等待子任务
*/
Task _outer = Task.Factory.StartNew(() =>
{
Console.WriteLine("Outer task beginning.");
Task _child = Task.Factory.StartNew(() =>
{
Thread.SpinWait(5000000);
Console.WriteLine("Detached task completed.");
}); });
_outer.Wait();
Console.WriteLine("Outer task completed.");
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));
}
finally
{
Console.ReadLine();
}
} }
}
代码效果
5.创建子任务
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
try
{
/*
* 如果在一个任务中运行的用户代码创建任务时指定了 AttachedToParent 选项,
* 则该新任务称为原始任务的子任务,原始任务称为父任务。
* 因为父任务隐式地等待所有子任务完成,所以可以使用 AttachedToParent 选项表示结构化的任务并行。 ————MSDN
* 说明:下面例子也来自于MSDN
* 其实意思就是父任务会等待子任务执行完后再结束
*/
Task _outer = Task.Factory.StartNew(() =>
{
Console.WriteLine("Outer task beginning.");
Task _child = Task.Factory.StartNew(() =>
{
Thread.SpinWait(5000000);
Console.WriteLine("Detached task completed.");
}, TaskCreationOptions.AttachedToParent); });
_outer.Wait();
Console.WriteLine("Outer task completed.");
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));
}
finally
{
Console.ReadLine();
}
} }
}
代码效果
C# 任务并行库使用小计 z的更多相关文章
- [C#]『PLINQ』任务并行库使用小计
并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现. PLINQ 实现完整的 LINQ 标准查询运算符集作为 T:System.Linq 命名空间的扩展方法,并具有用于并行 ...
- [C#]『Barrier』任务并行库使用小计
Barrier 是一个对象,它可以在并行操作中的所有任务都达到相应的关卡之前,阻止各个任务继续执行. 如果并行操作是分阶段执行的,并且每一阶段要求各任务之间进行同步,则可以使用该对象. --MSDN ...
- [C#]『Task』任务并行库使用小计
1.简单创建使用 using System; using System.Diagnostics; using System.Threading; using System.Threading.Task ...
- [C#]『CountdownEvent』任务并行库使用小计
System.Threading.CountdownEvent 是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定. CountdownEvent 专门用于以下情况:您必须使用 ...
- C#多线程编程系列(五)- 使用任务并行库
目录 1.1 简介 1.2 创建任务 1.3 使用任务执行基本的操作 1.4 组合任务 1.5 将APM模式转换为任务 1.6 将EAP模式转换为任务 1.7 实现取消选项 1.8 处理任务中的异常 ...
- 实现对数据进行分组小计并计算合计的实例 asp.net
可以通过数据绑定来实现 通过union all 来实现数据库 SELECT * FROM v3_pay_list2 where ( (ought_date >= '2012-12-06') a ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- C#多线程开发-任务并行库04
你好,我是阿辉. 之前学习了线程池,知道了它有很多好处. 使用线程池可以使我们在减少并行度花销时节省操作系统资源.可认为线程池是一个抽象层,其向程序员隐藏了使用线程的细节,使我们可以专心处理程序逻辑, ...
- SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计
表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...
随机推荐
- redis 连接字符串,设置密码
<add name="Abp.Redis.Cache" connectionString="127.0.0.1:6379,password=123456" ...
- 【贪心】洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle 题解
不是很容易写出正解的贪心问题. 题目描述 Although Farmer John has no problems walking around the fair to collect pri ...
- P4174 [NOI2006]最大获利
传送门 把用户群和中转站都看成点 用户群权值为正,中转站权值为负 为了获得用户群的权值,我们不得不一起获得中转站负的权值 发现就是裸的最大权闭合子图 那么从用户群连边向中转站,边值INF 从 S 连向 ...
- bzoj1818 内部白点(好题) 离散化+树状数组
题目传送门 题意:给出很多黑点,当一个坐标上下左右都有黑点时,这个点也被染成黑色,问最后黑点的数量. 思路:首先,一个很显然的结论,不可能出现无限染色的情况.所以不会输出-1,当n为0或者1时,答案就 ...
- Codeforces - 570D 离散DFS序 特殊的子树统计 (暴力出奇迹)
题意:给定一棵树,树上每个节点有对应的字符,多次询问在\(u\)子树的深度为\(d\)的所有节点上的字符任意组合能否凑成一个回文串 把dfs序存储在一个二维线性表中,一个维度记录字符另一个维度记录深度 ...
- [转] Emmet-前端开发神器
[From] https://segmentfault.com/a/1190000007812543 Emmet是一款编辑器插件,支持多种编辑器支持.在前端开发中,Emmet 使用缩写语法快速编写 H ...
- 网络知识之ipset
ipset介绍 ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以 ...
- 字典表+委托替代switch解决思路
参考:http://www.jianshu.com/p/8887b3b3e8ba 代码 namespace 解决Switch { class Program { delegate string fun ...
- 阅读redis源代码的一些体会
最近在学习redis及阅读redis等程序的源码时,有一些收获,特记录到下面. 1.第一步,阅读源代码借助最好可以跟踪的工具去读,如sourceinsight. 我使用的是windows7环境,又因为 ...
- spring-boot 1.4.x遇到的cpu高的问题
如果你的spring-boot应用里tomcat线程耗cpu较高,并主要耗在做读取jar的操作上(堆栈类似下面),可能跟我们遇到同样的问题. CRC32.update(byte[], int, int ...