【发布时间】:2013-09-20 04:30:37
【问题描述】:
This question 将我引向另一个更一般(可能是基本)的问题,为什么Task 对象不可重用?
微软不加解释地写下此声明:
一个任务只能启动和运行一次。任何计划的尝试 第二次执行任务将导致异常。
这背后的原因是否如此明显以至于不值得解释?重复设置和启动 Task 并使用 Continuation 不会影响性能吗?
【问题讨论】:
-
Task表示对传递的委托的单次调用;它是不可重用的,因为它是为了代表一次完成的事情。但是,委托可以随意重复使用多少次,因为它代表要完成的事情,而不是该事情的任何特定执行。 -
当我们使用
Task来包装Event时,我们是否会遇到无法理解Task的一次性使用性质的危险? -
@rasx,
Task包裹Event是什么意思? -
@rasx 当您使用
Task包装事件时,您是说此任务表示该事件被调用的下一次时间,而不是它表示事件作为一个整体,或每次调用它。要执行后者,您可以使用IObservable,它可以代表该事件的每一次调用。 -
@MattSmith 使用
TaskCompletionSource创建任务的常见模式,该任务将在下次触发事件时完成。