</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就不是有线程池中的线程。