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的更多相关文章

  1. [C#]『PLINQ』任务并行库使用小计

    并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现. PLINQ 实现完整的 LINQ 标准查询运算符集作为 T:System.Linq 命名空间的扩展方法,并具有用于并行 ...

  2. [C#]『Barrier』任务并行库使用小计

    Barrier  是一个对象,它可以在并行操作中的所有任务都达到相应的关卡之前,阻止各个任务继续执行. 如果并行操作是分阶段执行的,并且每一阶段要求各任务之间进行同步,则可以使用该对象. --MSDN ...

  3. [C#]『Task』任务并行库使用小计

    1.简单创建使用 using System; using System.Diagnostics; using System.Threading; using System.Threading.Task ...

  4. [C#]『CountdownEvent』任务并行库使用小计

    System.Threading.CountdownEvent  是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定. CountdownEvent  专门用于以下情况:您必须使用 ...

  5. C#多线程编程系列(五)- 使用任务并行库

    目录 1.1 简介 1.2 创建任务 1.3 使用任务执行基本的操作 1.4 组合任务 1.5 将APM模式转换为任务 1.6 将EAP模式转换为任务 1.7 实现取消选项 1.8 处理任务中的异常 ...

  6. 实现对数据进行分组小计并计算合计的实例 asp.net

    可以通过数据绑定来实现  通过union all 来实现数据库 SELECT * FROM v3_pay_list2 where ( (ought_date >= '2012-12-06') a ...

  7. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  8. C#多线程开发-任务并行库04

    你好,我是阿辉. 之前学习了线程池,知道了它有很多好处. 使用线程池可以使我们在减少并行度花销时节省操作系统资源.可认为线程池是一个抽象层,其向程序员隐藏了使用线程的细节,使我们可以专心处理程序逻辑, ...

  9. SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计

    表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...

随机推荐

  1. 应大数据时代而写了个磁力搜索的网页- WWW.MOVIH.COM 磁力

    应大数据时代而写了个磁力搜索的网页- 索马里搜索磁力 http://www.,movih.com/ BT磁力示例网站:WWW.MOVIH.COM 采用分布式架构: JAVA系统:JBOSS7+EJB3 ...

  2. git 下载 安装

    1.下载Git,官网地址:https://git-scm.com/,进入官网首页 在右下方的显示器中找到最新的版本下载,点击下载,跳转到下载页面 下载完成 2.安装Git 双击刚刚下载完成的安装文件, ...

  3. HDU - 2256 矩阵快速幂 带根号的递推

    题意:求$ [(\sqrt{2}+\sqrt{3})^{2n}] mod 1024 $ 分析: 把指数的2带入 原式等于 $ [(5+2\sqrt{6})^n] $ 有一个重要的结论是n次运算后其结果 ...

  4. VBS映射网络驱动器 映射网络驱动器

    Dim objNetwork Set objNetwork = CreateObject("Wscript.Network") if objNetwork.EnumNetworkD ...

  5. SQL 每行随机产生数字

    Id,Amount) from Customer

  6. Python入门书的读书笔记

    入门书地址 三引号 (""" 或 ''') 来指定多行字符串字符串是不可变的输出小数点后三位 print('{0:.3f}'.format(1 / 3))输出字符串长度为 ...

  7. 宽度优先搜索(BFS)— 20180909 - 20180917

    BFS几类题: 1.图的遍历:a.层级遍历 b.由点及面 c.拓扑排序 2.简单图最短路径: 简单图:1.无向图 2.边权重一致 图的时间复杂度: N个点,M条边,M最大是N^2,时间复杂度O(N+M ...

  8. 用poi替换ppt中的文字和图片

    try {            // 获取PPT文件             String pptModelPath =ConfigReadUtil.getInstance().getConfigI ...

  9. GreenPlum 大数据平台--非并行备份(六)

    一,非并行备份(pg_dump) 1) GP依然支持常规的PostgreSQL备份命令pg_dump和pg_dumpall 2) 备份将在Master主机上创建一个包含所有Segment数据的大的备份 ...

  10. cloudemanager安装时出现failed to receive heartbeat from agent问题解决方法(图文详解)

    不多说,直接上干货! 安装cdh5到最后报如下错误: 安装失败,无法接受agent发出的检测信号. 确保主机名称正确 确保端口7182可在cloudera manager server上访问(检查防火 ...