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

348 篇文章 0 订阅
67 篇文章 0 订阅
C#异步编程的实现方式(4)——Task任务

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

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

1、Task类构造函数

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

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

   1: Task task = new Task(TaskMethod);
   2: task.Start();

下面是TaskMethod方法:

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

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

   1: static void Main(string[] args)
   2: {
   3:     Task task = new Task(TaskMethod);
   4:     task.Start();
   5:  
   6:     for (int i = 0; i < 10; i++)
   7:     {
   8:         Console.WriteLine("Running in main thread.");
   9:         Thread.Sleep(500);
  10:     }
  11:     
  12:     Console.Read();
  13: }

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

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

下面是带参的线程方法:

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


2、TaskFactory类

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

   1: TaskFactory tf = new TaskFactory();
   2: tf.StartNew(TaskMethod);


3、Task.Factory属性

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

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


 

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

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

本文源代码:

width="98" height="120" src="https://skydrive.live.com/embed?cid=987912DC4988074B&resid=987912DC4988074B%219067&authkey=AIhbZH1XlP5mmLA" frameborder="0" scrolling="no">

分类: C#编程
0
2
(请您对文章做出评价)
« 上一篇: C#异步编程的实现方式(3)——ThreadPool线程池
» 下一篇: C#异步编程的实现方式(5)——连续任务
posted @ 2012-08-11 20:05 Mysterious One 阅读( 12321) 评论( 1) 编辑 收藏

  
#1楼 2648006 2013/4/2 10:15:29 2013-04-02 10:15 nx288882  
谢谢楼主分享~哈哈


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值