C# 多线程之--任务并行库(1)

</pre><pre name="code" class="html">
最近在学习C#的并行编程,在每本书上的看到的知识点都不全面,所以先参考多本书书籍的讲解,将并行编程,多线程编程的知识点整理一下,既是对该知识的整理,也是方便学习C#的朋友们快速理解这些知识,并不是所的的范例都是原创,所的范例绝对是编译通过再上传的,如发现有任何Bug,请多多指教。


.NET 4.0引入如TPL--Task Parallel Libray 任务并行库,极大的方便了异步并行编程。.NET4.5加以轻微的改进,更加方便使用。

TPL核心是任务,一个任务代表一个异步操作,该操作可以通过多种方式运行,可以使用或不使用独立线程运行。一个任务可以通过多种方式和其它任务组合起来。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;


//.NET4.0  引入任务并行库 Task Parallel Library --TPL
//.NET4.5  轻微改建,使用更简单,
//C#5.0    支持TPL,允许使用await,ansyc关键字来操作任务

//TPL 核心是任务,一个任务代表一个异步操作,该操作可以通过多种方式运行,可组合任务
//可以使用或不使用独立的线程运行

namespace 创建任务测试
{
    class Program
    {
        static void TasKMethod(string name)
        {
            Console.WriteLine("Task {0} is running on a thread:{1},Is ThreadPool Thread:{2}",
                name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Main Thread is:{0},Is ThreadPool :{1}",
                Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);
            Task t1 = new Task(() => TasKMethod("Task1"));
            var t2 = new Task(() => TasKMethod("Task2"));
            t1.Start();
            t2.Start();

            Task.Run(() => TasKMethod("Task3"));
            Task.Factory.StartNew(() => TasKMethod("Task4"));
            Task.Factory.StartNew(() => TasKMethod("Task5"), TaskCreationOptions.LongRunning);


            Console.ReadLine();

        }
    }
}

运行结果如下:
//Main Thread is:10,Is ThreadPool :False
//Task Task1 is running on a thread:11,Is ThreadPool Thread:True
//Task Task2 is running on a thread:11,Is ThreadPool Thread:True
//Task Task5 is running on a thread:15,Is ThreadPool Thread:False
//Task Task3 is running on a thread:14,Is ThreadPool Thread:True
//Task Task4 is running on a thread:11,Is ThreadPool Thread:True

从运行结果去体会,创建的任务所处的线程ID和是否为线程池线程。

通过Task构造函数创建的任务,必须使用start方法会执行任务。

Run,StartNew方法创建的任务直接执行,并且StartNew方法可以有附件参数。

长时间运行的Task5就不是有线程池中的线程。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值