zoukankan      html  css  js  c++  java
  • C# Task的使用---Task的启动

    .NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能。任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行许多控制。

    启动任务

        1)、使用TaskFactory类的实例,在其中把TaskMethod()方法传递给StartNew方法,就会立即启动任务。

       1: using System;
       2: using System.Collections.Generic;
       3: using System.Linq;
       4: using System.Text;
       5: using System.Threading;
       6: using System.Threading.Tasks;
       7: namespace TaskSamples
       8: {
       9:     class Program
      10:     {
      11:         static void TaskMethod()
      12:         {
      13:             Console.WriteLine("running in a task");
      14:             Console.WriteLine("Task id:{0}",Task.CurrentId);
      15:         }
      16:  
      17:         static void Main(string[] args)
      18:         {
      19:             //using task factory
      20:             TaskFactory tf = new TaskFactory();
      21:             Task t1 = tf.StartNew(TaskMethod);
      22:             Console.ReadKey();
      23:          }
      24:     }
      25: }

    运行结果如下所示:

    image

    2)、使用Task类的Factory属性,Task.Factory返回TaskFactory的默认实例。在其中把TaskMethod()方法传递给StartNew方法。这种方法实际和第一种方法是一样的。

       1: using System;
       2: using System.Collections.Generic;
       3: using System.Linq;
       4: using System.Text;
       5: using System.Threading;
       6: using System.Threading.Tasks;
       7: namespace TaskSamples
       8: {
       9:     class Program
      10:     {
      11:         static void TaskMethod()
      12:         {
      13:             Console.WriteLine("running in a task");
      14:             Console.WriteLine("Task id:{0}",Task.CurrentId);
      16:  
      17:         
      15:         }
      18:         static void Main(string[] args)
      19:         {
      20:            
      21:             //using the task factory via a task
      22:             Task t2 = Task.Factory.StartNew(TaskMethod);
      23:             Console.ReadKey();
      24:          }
      25:     }
      26: }

    3)、使用Task类的实例,然后调用Start方法启动任务。运行结果和上面两种方式相同。在使用Task类时,除了调用Start()方法,还可以调用RunSynchronously()方法。这样任务也会启动,但在调用者的当前线程中,它正在运行的时候,调用者需要一直等待到该任务结束。默认情况下,任务是异步运行的。

       1: using System;
       2: using System.Collections.Generic;
       3: using System.Linq;
       4: using System.Text;
       5: using System.Threading;
       6: using System.Threading.Tasks;
       7: namespace TaskSamples
       8: {
       9:     class Program
      10:     {
      11:         static void TaskMethod()
      12:         {
      13:             Console.WriteLine("running in a task");
      14:             Console.WriteLine("Task id:{0}",Task.CurrentId);
      15:         }   
      16:              
      17:         static void Main(string[] args)
      18:         {             
      19:             ////using Task constructor
      20:             Task t3 = new Task(TaskMethod);
      21:             t3.Start();
      22:             Console.ReadKey();
      23:          }
      24:     }
      25: }

    使用Task类的构造函数和TaskFactory类的StartNew()方法时,都可以传递TaskCreationOptions枚举中的值。设置LongRunning选项,可以通知任务调度器,该任务需要较长时间执行,这样调度器更可能使用新线程。如果该任务应关联到父任务上,而父任务取消了,则该任务也应取消,此时应设置AttachToParent选项。PerferFairness的值表示,调度器应提取出已在等待的第一个任务。如果一个任务在另一个任务内容创建,这就不是默认情况。如果任务使用了子任务创建了其他工作,子任务就优先于其他任务。它们不会排在线程池队列中的最后。如果这些任务应以公平的方式与所有其他任务一起处理,就设置该选项为PerferFairness。

       1: Task t3 = new Task(TaskMethod,TaskCreationOptions.PreferFairness);
       2:           t3.Start();

    http://www.cnblogs.com/jerry01/archive/2012/09/14/2684914.html

  • 相关阅读:
    NotMapped属性特性
    html.EditorForModel自定义模版
    ASP.NET MVC Core的TagHelper (高级特性)
    C#静态构造函数调用机制
    ASP.NET Forms 身份认证
    特别需要注意!
    观后感
    python进阶日记(生成器)
    python进阶日记(try except)
    python进阶日记(lambda函数)
  • 原文地址:https://www.cnblogs.com/chen110xi/p/4549677.html
Copyright © 2011-2022 走看看