【发布时间】:2022-01-28 05:04:10
【问题描述】:
我有很多反应性的代码,但需要调用基于任务的方法。
例如,在这个 sn -p PracticeIdChanged 中是一个 IObservable。当 PracticeIdChanged 触发时,我希望系统通过重新加载一些内容来做出反应,并具有如下所示的代码:
PracticeIdChanged.Subscribe(async x => {
SelectedChargeInfo.Item = null;
await LoadAsync().ConfigureAwait(false);
});
虽然它似乎工作正常,但我收到有关在订阅中执行异步代码的警告。此外,我认为这是一种代码异味,因为我正在混合两个单独的线程模型,我认为这可能会在以后咬我。
像这样的重构工作(甚至)没有像 .Merge()、.Switch() 或 .Concat() 这样的组合方法
PracticeIdChanged
.Do(_ => SelectedChargeInfo.Item = null)
.Select(_ => LoadAsync().ToObservable())
.Subscribe();
当 PracticeIdChanged 触发 LoadAsync 方法时执行
Select 产生一个看起来很奇怪的 IObservable
在很多地方,我使用 SelectMany 来执行基于任务的方法,但它需要返回任务,这需要更改上面示例中基于任务的方法的签名,而我不想这样做。
【问题讨论】:
标签: c# system.reactive rx.net