任务编程是.net 4.0提供应对平行程序开发的一套框架,该框架的相关类在System.Thread.Task命名空间下.我们将通过一系列文章来介绍该框架的功能和应用开发。

1.创建任务

创建任务有两种方法:第一种是新建一个task对象,然后调用Start方法执行任务。第二种方法是通过工厂方法直接执行任务项。

示例代码:

 多任务操作,

运行结果:

多任务操作,

创建任务的时候有四种选项,通过设置TaskCreationOption的值来选择

  1. None 默认创建选项
  2. PreferFairness 该选项告诉任务调度器对待任务公平处理,没有优先级之分。
  3. LongRunning  该选项告诉任务调度器该任务是一个执行时间较长的任务,以便任务调度器优化。
  4. AttachedToParent 该选项指明了任务之间的父子关系。

关于这些选项的使用后面会做相关介绍。

2. 传递状态

我们可通过传递一个System.Action<object>的实例对象的方式给任务传递状态变量。

示例代码:

多任务操作,

运行结果:

多任务操作,

3.获取结果

如果希望获取任务执行的结果,那么在创建任务的时候必须创建一个Task<T>对象,T表示你想要返回参数类型。通过Task对象的Result属性可获取任务执行结果.

示例代码如下:

多任务操作,

运行结果:

多任务操作,

这里大家会担心我的任务是异步执行的,获取结果时无法正确获取。其实这里的获取结果是阻塞的操作即直到获取到结果才返回。

今天主要介绍了任务编程的一些基本知识,下一篇文章中我将介绍任务取消以及等待.

     在多线程编程中取消操作是一个很普遍的处理操作,最简单的做法是通过设置一个标识位来判断是否取消。.net 任务并行框架提供了一套有效机制来实现任务的取消,以降低取消操作的风险。

     在.net 任务并行框架中通过CancellationTokenSource和CancellationToken这两个类来执行任务取消操作以及获取取消状态。CancellationToken是作为一个标记存放于任务中,CancellationTokenSource是标记的状态管理者和操作者。

     一种典型的检测取消操作的方式是轮询标记。

    实例代码:

多任务操作,

运行结果:

多任务操作,

以委托的方式检测取消操作,任务取消操作机制提供了一种委托(delegate)方式,让我们在任务取消时执行相应的操作。

示例代码:

多任务操作,

运行结果:

多任务操作,

有的时候我们希望在取消一个任务的同时开启另一个任务,这时我们通过标记对象的WaitHandler的WaitOne操作来实现。

示例代码:

多任务操作,

运行结果:

多任务操作,

任务取消就介绍到这里,下一篇将介绍任务等待.欢迎大家提出意见.

    有时我们需要等待任务的完成,有可能等待单个任务,等待多个任务中任意一个完成,或者等待多个任务都完成。

    等待单个任务示例代码:

运行结果:

多任务操作,

运行结果:

多任务操作,

可以看得出来消耗的时间和任务执行的时间差不多。

等待任意一个任务示例代码:

多任务操作,

运行结果:

多任务操作,

可以看出消耗时间和运行时间最短的那个任务执行时间差不多。

等待所有任务示例代码:

多任务操作,

运行结果:

多任务操作,

可以看出消耗时间和运行最长的那个任务时间差不多。

等待任务执行就介绍到这里,下一篇将介绍任务编程中的异常处理.欢迎大家发表意见.

     多任务运行过程如果出现异常情况,我们如何获知这是一个比较困难的问题。我们只能在每个任务内部异常捕获和处理,但系统级别的异常我们想捕获就困难了。任务编程框架提供了一种聚合异常的方式,集中管理一系列任务的异常情况。我们可以在任务执行的外部捕获到任务的异常。框架中提供了AggregateException这个类来获取任务的异常信息。

示例代码:

多任务操作,

运行结果:

多任务操作,

另一种处理方式是迭代处理,对一系列的任务执行统一的处理操作。

我们只修改下catch部分的代码.

多任务操作,

运行结果同上。

多任务编程中的异常处理我们就介绍到这里.之后的文章我们将介绍多任务编程中的任务调度.

相关文章:

  • 2021-11-22
  • 2021-06-10
  • 2021-10-07
  • 2021-08-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-28
猜你喜欢
  • 2021-05-05
  • 2022-03-02
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2021-08-20
  • 2021-12-05
相关资源
相似解决方案