有没有办法将观察者订阅为异步

Alw*_*wyn 1 c# multithreading asynchronous reactive-programming system.reactive

给定一个同步观察者,有没有办法做到这一点:

observable.SubscribeAsync(observer);
Run Code Online (Sandbox Code Playgroud)

并且observer异步调用所有方法或者是在创建观察者时必须处理的内容吗?

rei*_*erh 12

如果您需要在流中吐出新值时调用异步方法,那么您将找到最常用的解决方案SelectMany.问题是,这不会等待方法完成,导致创建的任何任务SelectMany并行运行.

如果要在等待异步函数完成时阻塞流,则需要以下内容:

Observable.Interval(TimeSpan.FromSeconds(1))
          .Select(l => Observable.FromAsync(asyncMethod))
          .Concat()
          .Subscribe();
Run Code Online (Sandbox Code Playgroud)

要么:

Observable.Interval(TimeSpan.FromSeconds(1))
          .Select(_ => Observable.Defer(() => asyncMethod().ToObservable()))
          .Concat()
          .Subscribe();
Run Code Online (Sandbox Code Playgroud)


mei*_*lke 8

您可能想要查看ObserveOnSubscribeOn(更多信息,甚至更多信息).