使用任务并行库

任务并行库(Task Parallel Library,TPL)可以被认为是线程池上的又一个抽象层,其对程序员隐藏了与线程池交互的底层代码,并提供了更方便的细粒度的API。

创建任务

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Chapter4.Recipe1
{
    class Program
    {
        static void Main(string[] args)
        {
            var t1 = new Task(() => TaskMethod("Task 1"));
            var t2 = new Task(() => TaskMethod("Task 2"));
            t2.Start();
            t1.Start();
            Task.Run(() => TaskMethod("Task 3"));
            Task.Factory.StartNew(() => TaskMethod("Task 4"));
            Task.Factory.StartNew(() => TaskMethod("Task 5"), TaskCreationOptions.LongRunning);
            Thread.Sleep(TimeSpan.FromSeconds(1));
        }

        static void TaskMethod(string name)
        {
            Console.WriteLine("Task {0} is running on a thread id {1}. Is thread pool thread: {2}",
                name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);
        }
    }
}

1. 使用构造函数创建任务,传入一个lambda表达式作为Action委托,调用Start()启动任务。

2. 使用Task.Run()运行任务,与使用构造函数创建任务不同,Task.Run()创建的任务会立刻开始执行,无需调用Start()

3.使用Task.Factory.StartNew()运行任务,与使用构造函数创建任务不同,Task.Run()创建的任务会立刻开始执行,无需调用Start()

4.标记任务为长时间操作,结果该任务将不会使用线程池,而在单独的线程中运行。

猜你喜欢

转载自www.cnblogs.com/larry-xia/p/9272154.html
今日推荐