任务并行库
分类:突袭反恐任务

 图片 1

       前边我们上学了如何是线程,线程之间的一起,使用线程池。使用线程池能够减小我们多量短期操作的交互线程所用的操作系统财富。

         C#5.0及然后的版本都早就嵌入了对TPL的支撑,允许大家接纳await与async关键字打开职分施行。

         本示例是从职责中拿走结果值。我们经过区别的实行结果来呈现在线程池中推行与在主线程中施行的不一样之处。

  1. 代码如下:

图片 2

一、   创造职务

 接上文 八线程编制程序学习笔记——线程同步(二)

        然后大家运维了task1,使用start方法运转职务并听候结果。这一个职责会被放在线程池中运营,何况主线程会等待,直到职分完成并赶回结果。

        首先直接运维TaskOper方法,遵照程序运维结果,大家得以领会那么些办法是被一道实施的。

 

 

 

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

namespace ThreadTPLDemo
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Task 运行示例 ————{0}",DateTime.Now);

           var task1 = new Task(() => TaskOper("Task1"));
            var task2 = new Task(() => TaskOper("Task2"));
            task1.Start();
            task2.Start();           

            Task.Factory.StartNew(() => TaskOper("Task 3"));
Task.Run(() => TaskOper("Task 4")); 

            //长时间运行
            Task.Factory.StartNew(() => TaskOper("Task 5"),TaskCreationOptions.LongRunning);
                      Thread.Sleep(1000);
            Console.ReadKey();
        }
        private static void TaskOper(string  name)
        {           

            Console.WriteLine("Task 运行在 线程 ID:{0} 上,这个线程是不是线程池中的线程:{1},名称: {2}",            Thread.CurrentThread.ManagedThreadId,Thread.CurrentThread.IsThreadPoolThread, name); 

        }
    }
}

        Task3运作task1的艺术,可是这次未有阻塞主线程,只是在职分到位此前循环打字与印刷出任务情状。

  接上文 多线程编制程序学习笔记——线程同步(三)

        接着,大家选用task.Run和task.startNew方法来运转三个职责。与行使task构造函数差别之处,在于那五个被创立的职责会立时实践。所以不必显式地调用 那么些职务的Start方法。从task1到task4全体任务都以放在线程池中施行的,多次推行,可以开采试行顺序是不均等的。

2.程序运维结果如下图。

          Task5,由于我们标识为了长日子运作,所以是三个独立的线程,不是线程池中的线程来运行的。

二、   使用职务执行基本的操作

     

接上文 十六线程编制程序学习笔记——线程池(二)

 接上文 多线程编制程序学习笔记——基础(二)

       在net framework 4.0中微软又提供了一个新的异步操作的意义,叫做任务并行库(TPL)。职分并行库的为主是职责(task)。一个职分代表了一个异步操作,譔操作能够因而各样措施运转,能够使用或不行使独立的线程。

 接上文 二十四线程编制程序学习笔记——线程池(三)

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

namespace ThreadTPLDemo
{

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Task 基本操作 ————");
            TaskOper("----主线程Task运行");

           Task<string> task1 =CreateTask("Task1");
            task1.Start();
            string result = task1.Result;
            Console.WriteLine(" 运行结果——{0}", result); 

            Task<string> task2 = CreateTask("Task2");
            task2.RunSynchronously();
            result = task1.Result;
            Console.WriteLine(" 运行结果——{0}", result); 

            Task<string> task3 = CreateTask("Task3");
            task3.Start();
          while(!task3.IsCompleted)
            {
                Console.WriteLine(" 状态——{0}", task3.Status);
                Thread.Sleep(500);
            }

            Console.WriteLine(" ——状态—{0}", task3.Status);
            result = task3.Result;
            Console.WriteLine(" 运行结果——{0}", result);           

            Console.ReadKey();
        }
        private static string TaskOper(string  name)
        {         

            Console.WriteLine("Task 线程 ID:{0} 上,是不是线程池中的线程:{1},名称: {2}",
            Thread.CurrentThread.ManagedThreadId,Thread.CurrentThread.IsThreadPoolThread, name);
            Thread.Sleep(2000);
            return string.Format("线程ID:{0},名称:{1}", Thread.CurrentThread.ManagedThreadId,name);
        }
        static Task<string> CreateTask(string name)
        {
            return new Task<string>(() => TaskOper(name));

        }
    }
}

 1. 代码如下:

接上文 多线程编制程序学习笔记——基础(一)

         以下示例,大家使用.Net Framework 4.5随后版本。

        Task2与task1相似,Task2通过RunSynchronously()方法运转的。这几个职分运营在主线程中,那几个职责的出口与TaskOper方法输出结果一律。那正是task的优势,能够利用task对TaskOper方法进行优化,能够制止使用线程池来推行一些实行时间相当短的操作。

        上边包车型大巴身体力行,大家选择task构造函数创造了五个义务。大家传入了四个lambda表达式做为操作职务。然后利用start运营职责。

        贰个职分(Task)能够经过各样办法和其他职分组合起来使用。比如,能够同不经常间打开多个职责,等待全体职分成功,再起叁个任务实行操作。叁个职分能够有多少个其余职分组成,那些任务也能够依次具备和睦的子义务。

 2.运作结果如下图。小编把程序运营了五回。请自行查看差别之处。

接上文 三多线程编制程序学习笔记——线程池(一)

 接上文 十二线程编制程序学习笔记——线程同步(一)

 接上文 三十二线程编程学习笔记——基础(三)

本文由金沙APP发布于突袭反恐任务,转载请注明出处:任务并行库

上一篇:考研从零开始需要知道的 下一篇:HDFS理解
猜你喜欢
热门排行
精彩图文