为什么Task对象不可重用?

时间:2013-09-19 20:22:53

标签: c# task-parallel-library

This question引导我进入另一个更普遍(可能是基本的)问题,为什么Task对象不可重用?

Microsoft在没有解释的情况下撰写此声明:

  

任务只能启动并运行一次。任何安排的尝试   第二次任务会导致异常。

这背后的推理是如此明显,以至于不值得解释?使用Continuation重复设置和启动Task是否没有性能损失?

1 个答案:

答案 0 :(得分:5)

Task表示单个某些可能在将来的某个时刻发生的事情。它提供了在任务完成时公开指示的方法,是否完成,该任务的最终状态等等。

任务完成后再次启动IsCompleted属性应该返回什么?它确实完成了,但你又重新开始了。你是说调用者应该只能访问最终状态(即它是否被取消,它是例外,它是Result等)的时间窗口它是在它完成之前启动的吗?这将是非常混乱的。

还有其他对象可以表示正在重复的操作,或者某些异步操作的集合,例如(在其他选项中)IObservable,它实际上是异步序列这可能(可能)表示对特定委托的N次调用的结果,顺序调用。