UniRxでObservable -> IEnumerator -> Observable変換した時のライフサイクル

コード

gist9ab1097554ad9f37a8931f82cfdcb467

 

破棄されない話

.SelectMany()にCoroutineを使用するとうまく破棄されない。

.ToYieldInstruction()を使ってObservable -> IEnumeratorに変換したCoroutineを実行中にコンポーネントを削除するとエラーを吐き出す。

 

.ToYieldInstruction()したCoroutineはどうやら源流のObservableに紐づけられないようなので

別途.AddTo()でライフサイクルを定義してあげる必要がある

 

CompositeDisposableなどを使用したライフサイクル管理をしている場合は

  1. 引数でライフサイクルの依存先を渡す
  2. Observable.FromCoroutine(_ => Coroutine()).AddTo(依存先)

でなんとかできるのではないでしょうか。

 

追記

 

作者様

neuecc (@neuecc) | Twitter

 

よりご回答いただきました、模範解答はこちらのようです。

gist.github.com

 

CancellationTokenと言う仕組みがあり、引数にそいつを渡してあげることでライフサイクルを定義できるようです。

シランカッタ・・・

 

使うときはちゃんとオペレータの実装も見ないといかんですね。

neuecc様有難うございました。

 

 

終わり