.Net并行库介绍——Task(1)

TaskThreadPool的功能类似,可以用来创建一些轻量级的并行任务。对于将一个任务放进线程池
    ThreadPool.QueueUserWorkItem(A);
这段代码用Task来实现的话,方式如下:
    Task.Create(A);

这两端代码的使用和实现的功能都十分相似。但和TheadPool相比,Task有着更多的功能,更加方便我们使用。

  • Task.WaitAll()
    该函数的功能是等待多个任务等待任务完成,这在线程同步时经常需要用到。

假如我们要创建三个任务,并等待它们完成。这个功能用TheadPool实现如下:

    using (ManualResetEvent mre1 = new ManualResetEvent(false))
    using (ManualResetEvent mre2 = new ManualResetEvent(false))
    using (ManualResetEvent mre3 = new ManualResetEvent(false))
    {
        ThreadPool.QueueUserWorkItem(delegate
        {
            A();
            mre1.Set();
        });
        ThreadPool.QueueUserWorkItem(delegate
        {
            B();
            mre2.Set();
        });
        ThreadPool.QueueUserWorkItem(delegate
        {
            C();
            mre3.Set();
        });
        WaitHandle.WaitAll(new WaitHandle[] { mre1, mre2, mre3 });
    }

用Task类实现起来就相对简单多了:
    Task t1 = Task.Create(delegate { A(); });
    Task t2 = Task.Create(delegate { B(); });
    Task t3 = Task.Create(delegate { C(); });
    t1.Wait();
    t2.Wait();
    t3.Wait();

或者我们还可以这么写:
    Task t1 = Task.Create(delegate { A(); });
    Task t2 = Task.Create(delegate { B(); });
    Task t3 = Task.Create(delegate { C(); });
    Task.WaitAll(t1, t2, t3);

  • Task.Cancel Task.CancelAndWait
    这个是一个成员函数,用于取消已经创建的Task,如果该Task正在执行中,该函数并不终止Task的执行,只是将 IsCanceled属性设置为 true
    Task.Cancel Task.CancelAndWait的区别在于: Task.CancelAndWait除了取消Task外,还将等待该Task执行完成(如果该Task在执行中)。
  • Task.ContinueWith
    该成员函数的作用是在执行完Task后,再执行一个后续操作。这也是一个比较有用的功能,由于比较简单,就不介绍了。

除了上述介绍的几个方法外,Task还有一些比较有用的属性和方法,也非常简单,直接参看其说明文档即可。

本文主要介绍了Task的基本的用法,下篇文章将介绍一些进阶的知识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值