【问题标题】:Do something after observable finishes?在可观察完成后做些什么?
【发布时间】:2011-11-02 14:39:04
【问题描述】:

我正在使用 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;});

【问题讨论】:

    标签: c# linq observable


    【解决方案1】:

    你应该看看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));
    

    这应该在可观察序列终止后执行。

    【讨论】:

    • 文档还声明它也在异常情况下运行 - 有没有办法检查它以便最终代码可以适应?在例外情况下,您可能不想像往常一样继续。
    • 你是对的。我不确定,我将不得不对此进行调查并(希望)用有用的东西更新我的答案!
    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2023-01-07
    • 2019-03-25
    • 2017-11-26
    相关资源
    最近更新 更多