为什么Task对象不可重用?
这个问题引出了另一个更普遍的(也可能是基本的)问题,为什么Task
对象不可重用?
微软在没有解释的情况下写下这
任务只能启动并仅运行一次。 任何第二次安排任务的尝试都将导致exception。
这背后的推理是如此明显,以至于它不值得解释吗? 重复设置和启动具有Continuation的Task
是否没有性能损失?
Task
是一种可能在未来的某个时刻发生的单一事物的表示。 它提供了在任务完成时公开指示的方法,是否已完成,该任务的最终状态是什么,等等。
任务完成后再次启动, IsCompleted
属性应该返回什么? 它确实完成了,但你又重新开始了。 你是说调用者应该只有能够在启动之后和完成之前的时间窗口访问最终状态(即它是否被取消,它是例外,它是Result
等)? 这将是非常混乱的。
还有其他对象可以表示正在重复的操作,或者某些异步操作的集合,例如(在其他选项中) IObservable
,它实际上是一个异步序列 ,可以(可能)表示对特定N个调用的结果委托,顺序调用。