通过可观察序列执行线程参数

本文关键字:执行 线程 参数 观察 | 更新日期: 2023-09-27 17:50:00

我正在使用响应式ui,我遇到了一个问题,基本上在我的登录方法中,我想显示一个进度对话框,尝试登录,然后关闭对话框并返回最终结果。

这个问题的基本伪代码是这样的:
private IObservable<bool> AttemptLogin(CredentialPair pair)
{
    return Dialogs.ShowProgress("logging in", "doing stuff...")
        .SelectMany(progressController => DoTheActualLogin(pair))
        .Subscribe(boolForWhetherLoginSucceeded =>
        {
        });
}
    ShowProgress返回IObservable<ProgressController> DoTheActualLogIn返回IObservable<bool>

问题是,在执行登录后,我需要对进度控制器调用close方法。

我似乎不能想出一种方法来让控制器在序列中进一步下降。

我确信有一个组合子的序列,我错过了/做这样的事情的技术。

通过可观察序列执行线程参数

我想这就是你想要的:

(from progressController in Dialogs.ShowProgress("logging in", "doing stuff...")
 from result in DoTheActualLogin(pair)
 select new { result, progressController  })
 .Subscribe(anon => {...}, ex => {...})

Chris的回答很好,特别是如果您必须使用progressController进一步降低链。如果你只需要在登录后清理它,你可以这样做:

private IObservable<bool> AttemptLogin(CredentialPair pair)
{
    return Dialogs.ShowProgress("logging in", "doing stuff...")
        .SelectMany(progressController => 
                    DoTheActualLogin(pair).Finally(() => progressController.Close()))
        .Subscribe(boolForWhetherLoginSucceeded =>
        {
        });
}