2016-10-11 5 views
1

나는 두 가지가 있습니다 : Task<TResult> queryIObservable<bool> toggle을 반환하는 함수. 내가 만들고자하는 것은 IObservable<TResult>이고, toggletrue이 될 때마다 매번 query을 호출하는 무한 루프를 시작하고 그 결과를 반환합니다. 그런 다음 false을 토글하면 무한 루프가 중지됩니다.작업 함수에서 무한대 IObservable 및 관찰 가능 토글

작업에서 무한 루프를 만드는 방법을 읽었지 만, toggle 켜고 끄는 방법을 알아낼 수 없습니다. 또한 무한 루프에서 query을 실행할 수 없으며 필터링 만 할 수 있습니다. togglefalse 인 경우 쿼리를 호출하면 안됩니다. 또한 toggle이 false가되면 좋겠지 만 query이 이미 시작된 경우 결과 관찰 가능이 반환되지 않습니다. toggle이 거짓 일 때 query을 취소하는 것도 좋은 생각 일 수도 있지만 필수는 아닙니다.

그리고 자동으로 테스트 할 수 있기를 바랍니다. 내가 생각

답변

2

당신이 원하는 것을 정확하게 수행합니다

IObservable<TResult> query = 
    toggle 
     .Select(b => b 
      ? Observable 
       .Defer(() => Observable.FromAsync(() => SomeFunction())) 
       .Repeat() 
      : Observable 
       .Never<TResult>()) 
     .Switch(); 
+0

덕분에,이 예상대로 작동하는 것 같다. – Euphoric

+0

안녕하세요, 당신을 귀찮게해서 미안하지만, 내 후속 질문을 보시겠습니까 : http://stackoverflow.com/questions/39993609/infinite-iobservable-from-task-function-and-toggle-observable-with-parameters – Euphoric

+0

이 함수에 대한 테스트를 작성하려고합니다. 나는 Obscvable.FromAsync (() => SomeFunction())을'Func > query (단 하나의 항목을 반환하는 cold observable) 호출로 대체 했으므로'TestScheduler'를 사용하여이 함수를 테스트 할 수 있습니다. 하지만'scheduler.Start' 메소드가 메시지를 반환하지 않는 문제가 있습니다. 이 방법을 자동으로 테스트 할 수 있는지 확인할 수 있습니까? – Euphoric