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

标签 c# multithreading asynchronous system.reactive reactive-programming

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

observable.SubscribeAsync(observer);

observer 上的所有方法都是异步调用的,还是我在创建观察者时必须处理的事情?

最佳答案

如果您需要在流吐出新值时调用异步方法,您会发现最常见的解决方案是使用 SelectMany。问题是这不会等待方法完成,导致 SelectMany 创建的任何任务并行运行。

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

Observable.Interval(TimeSpan.FromSeconds(1))
          .Select(l => Observable.FromAsync(asyncMethod))
          .Concat()
          .Subscribe();

或者:

Observable.Interval(TimeSpan.FromSeconds(1))
          .Select(_ => Observable.Defer(() => asyncMethod().ToObservable()))
          .Concat()
          .Subscribe();

关于c# - 有没有办法将观察者订阅为异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814805/

相关文章:

java - 使用 Java 锁时出现竞争条件的可能性

c# - 移动/调整窗口大小时任务被阻止

android - 在 UI 中使用线程以加载网页的 Android 最佳实践?

javascript - 异步等待无法正常工作

scala play 框架如何对异步 Controller 进行单元测试

c# - 如何在 C# 中保存文件和在数据库中插入记录之间创建 Transactionscope

c# - 如何在对象上实现 Dispose 创建其他一次性用品

c# - 为什么 HttpClient 总是给我相同的响应?

c# - ASP.NET 加密 - aspnet_regiis - 农场

c# - 默认页面无法正常工作