C# 多线程 04-使用任务平行库 01-创建 Task
🏷️ 《C# 多线程》
简介
.Net Framework4.0 引入了一个新的关于异步操作的 API - 任务并行库(Task Parallel Library,简称 TPL)。
.Net Framework4.5 对该 API 进行了轻微的改进,使用更简单。
TPL 可被认为是线程池之上的有一个抽象层,其对程序员隐藏了于线程池交互的底层代码,可以使用或不使用独立线程运行。
C#5.0已经内置了对TPL的支持,允许我们使用新的 await
和 async
关键字以平滑的、舒服的方式操作任务。
创建 Task
csharp
static void Main(string[] args)
{
var t1 = new Task(() => TaskMethod("Task 1"));
var t2 = new Task(() => TaskMethod("Task 2"));
t2.Start();
t1.Start();
// 无需调用 Start 方法,立即开始工作
// Task.Run 只是 Task.Factory.StartNew 的一个快捷方式,但是后者有附加的选项
Task.Run(() => TaskMethod("Task 3"));
Task.Factory.StartNew(() => TaskMethod("Task 4"));
// 标记任务为长时间运行,结果该任务将不使用线程池,而在单独的线程中运行;
// 然而根据该任务的当前的任务调度器(task scheduler),运行方式有可能不同。
Task.Factory.StartNew(() => TaskMethod("Task 5"), TaskCreationOptions.LongRunning);
Thread.Sleep(TimeSpan.FromSeconds(1));
Console.ReadLine();
}
static void TaskMethod(string name)
{
Console.WriteLine($"Task {name} is running on a thread id {Thread.CurrentThread.ManagedThreadId}. Is thread pool thread: {Thread.CurrentThread.IsThreadPoolThread}");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
打印结果
txt
Task Task 2 is running on a thread id 3. Is thread pool thread: True
Task Task 1 is running on a thread id 4. Is thread pool thread: True
Task Task 4 is running on a thread id 3. Is thread pool thread: True
Task Task 3 is running on a thread id 6. Is thread pool thread: True
Task Task 5 is running on a thread id 7. Is thread pool thread: False
1
2
3
4
5
2
3
4
5