2011-11-02 2 views
3

iObservable을 사용하여 백그라운드에서 일부로드를 수행합니다. 로드가 완료되면 지정하고 싶습니다. 데이터 재 시도자가 수익률을 반환 할 때마다 대신이 작업을 한 번만 수행 할 수 있습니까? 어떻게해야합니까?관찰 가능한 종료 후에 무언가를합니까?

bool IsLoading = true; 
ObservableCollection<MyData> dataList = new 
ObservableCollection<MyData>(); 
DataLoader.RetrieveData().ToObservable(Scheduler.ThreadPool).Select(x => x).ObserverOn(Scheduler.Dispatcher).Subscribe(x => { 
    dataList.Add(x); 
    IsLoading = false;}); 

답변

4

너는 Finally extension method을 봐야한다, 너가 원하는 것을 정확하게 할 것이다!

bool IsLoading = true; 
ObservableCollection<MyData> dataList = new ObservableCollection<MyData>(); 
DataLoader.RetrieveData() 
    .ToObservable(Scheduler.ThreadPool) 
    .Select(x => x) 
    .ObserverOn(Scheduler.Dispatcher) 
    .Finally(() => IsLoading = false) 
    .Subscribe(x => dataList.Add(x)); 

관찰 가능한 시퀀스가 ​​종료 된 후에 실행해야합니다.

+0

또한 예외적으로 실행되는 문서도 있습니다. 확인하여 최종적으로 코드를 적용 할 수있는 방법이 있습니까? 예외가 발생하면 평상시처럼 계속하고 싶지 않을 것입니다. –

+0

네 말이 맞아. 나는 확실하지 않고 & 나는 그것을 조사해야하고 (희망을 갖고) 나의 대답을 유용한 것으로 업데이트해야한다! – Kevek

+0

오, 감사합니다. – CodeMonkey