第26章 计算限制的异步操作(8)

26.5.5 任务内部揭秘

在每个Task对象中,都包含代表Task唯一ID的一个Int32字段。创建一个Task对象时,字段初始化为零。第一次查询Task的只读Id属性时,属性将一个唯一Int32值分配给该字段,并从属性中返回它。TaskID从1开始,每分配一个ID都递增1。这个ID的意义在于,每个Task都可以用一个唯一的值来标识。运行一个任务的代码时,可以查询Task的静态CurrentId属性,它返回一个可空Int32(Int32?)。如果当前没有任务正在执行,查询CurrentId属性会返回null。

一个Task对象存在期间,可查询Task的只读Status属性了解它在其生存期的什么位置。这个属性返回一个TaskStatus值。TaskStatus值:Created、WaitingForActivation、WaitingToRun、Running、WaitingForChildrenToComplete、RanToCompletion、Canceled、Faulted。

一个Task或者Task<TResult>出错时,可以查询Task的Exception属性来获得任务抛出的未处理的异常。该属性总是返回一个AggregateException对象,它的包含了所有未处理的异常。

为简化编码,Task提供了几个只读的Boolean属性:IsCanceled、IsFaulted和IsCompleted。

如果Task是通过以下某个函数来创建的,这个Task对象就会处于WaitForActivation状态:ContinueWith、ContinueWhenAll、ContinueWhenAny或者FromAsync。

不能显式启动一个通过调用ContinueWith来创建的对象,这个Task会在它的先驱任务(antecedent task)执行完毕后自动开始。

26.5.6 任务工厂


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值