2016-12-23 7 views
2
var sub = observable.Subscribe(data => my_action(data)); 

sub変数を取り消すと、それは退会します。しかし、そうするときにはすでに呼び出されている場合はmy_actionが終了するのを待つでしょうか?サブスクリプションの廃棄 - サブスクリプションの処理が終了するのを待ちますか?

更新1:私はいくつかの副作用ではなく、意識的な決定をお願いします。これをThreading.Timerと比較してください。アクションを待つために、特別なDisposeメソッドを呼び出さなければなりません。

アップデート2:私はないアクションをキャンセルし、最後までアクションのを待っを求めます。

+0

「my_action」内のコードには、明示的に取り消すための明示的なキャンセルメカニズムが必要です。それ以外の場合は、コード内のあらゆる種類の問題を引き起こす可能性のあるスレッドを中止するかどうかです。 – Enigmativity

+0

@Enigmativity、私の更新を見て、待って!=キャンセルしています。 – astrowalker

答えて

3

によって異なります。アクションと処分が同じスレッド上で発生した場合、処分はアクションが完了した後に行われます。アクションが別のスレッド上で実行されると、それらは独立して実行され、アクションが実行されている間に処分が発生する可能性があります。

+0

回答ありがとうございます。つまり、処分には行動を待つコードがありますか? :-)タイマーについての私の発言を見てください。 – astrowalker

+0

@astrowalker - 「処分には行動を待つコードがあります」とはどういう意味ですか? – Enigmativity

+0

@Enigmativity、申し訳ありませんが、 "not"を忘れた場合は、 "処分はありません**はありません。それは、私が言い換えることを言い換えると、処分はアクションを完了するのを待つのではなく、待っているコードを処理するコードが含まれていないためです。 – astrowalker

3

あなたの質問がある場合、サブスクリプション処分は以前の観測でトリガーされたアクションをキャンセルすることになりますが、答えはいいえです。

EDIT

あなたの明確化の質問に答えるために、短い答えはノーです。処分は予定です。スレッド/スケジューラ状況に応じて、すぐに実行されるか、または使用可能なスレッドがあるときに実行されます。

+0

ありがとうございますが、私の質問は待つことであり、取り消すことではありません。 – astrowalker

+0

説明を明確にするために更新されました。 – Shlomo

関連する問題