zoukankan      html  css  js  c++  java
  • C#异步编程的实现方式(4)——Task任务

    C#异步编程的实现方式(4)——Task任务

    .Net Framework 4.0新增了一个System.Threading.Tasks命名空间,它包含的类提供了任务的相关操作。使用任务不仅可以获得一个抽象层,还能对底层线程进行很多统一的控制操作。这里先介绍一下Task的简单使用。

    最基本的是知道怎么启动一个Task。

    1、Task类构造函数

    使用Task类的构造函数。实例化Task对象时,任务不会立即运行,而是指定Created状态。接着调用Task类的Start()方法来启动任务。使用Task类时,除了调用Start()方法,还可以调用RunSynchronously()方法。这样,任务也会启动,但是同时调用。默认情况下,任务是异步运行的。

    Task类的构造函数接收一个无参无返回值的委托:

    Task task = new Task(TaskMethod);
    task.Start();

    下面是TaskMethod方法:

    static void TaskMethod()
     {
         for (int i = 0; i < 10; i++)
         {
             Console.WriteLine(String.Format("Running in a task. Task ID: {0}", Task.CurrentId));
             Thread.Sleep(500);
         }
     }

    方法里用Task.CurrentId属性取得当前任务ID。下面是主线程:

    static void Main(string[] args)
     {
         Task task = new Task(TaskMethod);
         task.Start();  
         for (int i = 0; i < 10; i++)
         {
             Console.WriteLine("Running in main thread.");
            Thread.Sleep(500);
         }
         Console.Read();
    
     }

    如果要往线程里传递参数,Task构造函数提供的重载,可以传入一个object类型的参数:

    Task task = new Task(TaskMethodWithParameter, "Hello world");
    task.Start();

    下面是带参的线程方法:

    static void TaskMethodWithParameter(object param)
     {
         for (int i = 0; i < 10; i++)
         {
             Console.WriteLine(String.Format("Running in a task. Parameter: {0}", param));
             Thread.Sleep(500);
         }
    
     }

    2、TaskFactory类

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

    TaskFactory tf = new TaskFactory();
    tf.StartNew(TaskMethod);

    3、Task.Factory属性

    Task类提供了一个Factory静态属性,这个属性返回一个TaskFactory对象。

    Task task = Task.Factory.StartNew(TaskMethod);

    后面的文章将介绍Task中的连续任务与层次任务

    参考资料:《C#高级编程》,http://developer.51cto.com/art/200908/145541.htm

  • 相关阅读:
    系统相对路径和绝对路径
    delphi TreeView 鼠标右击选择节点
    treeview得到鼠标右键点击的节点
    TREEVIEW右键菜单示例
    ORACLE
    监视oracle执行的SQL语句
    oracle数据库跟踪工具
    PL/SQL plsql Developer 14最新版注册码 (亲测可用)
    一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
    Node.jsp配环境更新中)
  • 原文地址:https://www.cnblogs.com/larva/p/7300303.html
Copyright © 2011-2022 走看看