【问题标题】:Subscription disposal -- does it wait for subscription action to end?订阅处置——它是否等待订阅操作结束?
【发布时间】:2016-12-28 02:48:19
【问题描述】:
var sub = observable.Subscribe(data => my_action(data));

当我处理 sub 变量时,它将取消订阅。好的,但是这样做时,如果它已经被调用,它会等待my_action 结束吗?

更新 1:我要求有意识的决定,而不是一些副作用。将此与 Threading.Timer 进行比较——为了等待操作,您必须调用特殊的 Dispose 方法。

更新 2:我要求等待动作结束,而不是取消动作。

【问题讨论】:

  • my_action 中的代码必须有一些明确的取消机制才能彻底取消。否则,如果要中止可能导致代码中出现各种问题的线程。
  • @Enigmativity,查看我的更新,等待!=取消。

标签: system.reactive idisposable


【解决方案1】:

这取决于。如果 action 和 dispose 发生在同一个线程上,那么 dispose 将在 action 完成后发生。如果操作在与处置不同的线程上运行,则它们独立发生,并且处置可能在操作执行时发生。

【讨论】:

  • 感谢您的回答,也就是说,处置确实有任何代码等待操作,对吗? :-) 请参阅我对 Timer 的评论。
  • @astrowalker - “处置确实有任何代码等待行动”是什么意思?
  • @Enigmativity,对不起,错过了“不”,它应该读作“处置没有有任何...”。这意味着,我改写了,我说,处理不会等待操作完成,因为它不包含任何负责处理等待的代码。
【解决方案2】:

如果您的问题是,subscription-disposal 是否会取消先前观察触发的操作,答案是否定的。

编辑

要回答您明确的问题,简短的回答是否定的。 已安排立即进行处置。根据您的线程/调度程序情况,它会立即执行,或者在有可用线程时执行。

【讨论】:

  • 谢谢,但我的问题是关于等待,而不是取消。
  • 更新说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2021-06-08
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多