c# - 使用 Rx .NET 从另一个 observable 通知异步主题
问题描述
我正在尝试通知Subject _sub
从另一个可观察对象订阅的听众,然后在Do
处理程序中记录一些消息。我正在调用 OnNext,如果_sub
不是异步的,一切都会正常工作。这里的问题是没有 OnNextAsync 函数,我会在第一个 observable 中等待。做这个的最好方式是什么?
class Program
{
private static Subject<int> _sub = new Subject<int>();
static void Main(string[] args)
{
_sub.SelectMany(async _ =>
{
Console.WriteLine("SUB START: " + _);
await Task.Delay(3000);
Console.WriteLine("SUB END: " + _);
return 1;
}).Subscribe();
Start();
}
public static void Start()
{
int count = 0;
Observable.Interval(TimeSpan.FromSeconds(5)).Select(x =>
{
Console.WriteLine("START INTERVAL");
_sub.OnNext(count++); //onNext is not awaitable
Console.WriteLine("END INTERVAL");
return 1;
})
.Do(_ => Console.WriteLine("ALL FINISHED"))
.Subscribe();
Console.WriteLine("READLINE");
Console.ReadLine();
}
}
结果:
READLINE
START INTERVAL
SUB START: 0
END INTERVAL
ALL FINISHED
SUB END: 0
预期结果:
READLINE
START INTERVAL
SUB START: 0
SUB END: 0
END INTERVAL
ALL FINISHED
解决方案
可观察对象不应依赖于其观察者的行为。
我建议你重新考虑整个事情。你正在做的事情看起来更具交互性而不是反应性。
推荐阅读
- javascript - 在整个代码中的特定元素之后按类查找下一个元素(jQuery)
- empirical-lang - 试图在 OSX 上构建,但出现“没有规则来制作目标 antlr4_static”错误
- python - 用于捕获部分字符串的正则表达式
- webpack - Windows 上的 sw-precache-webpack-plugin - 无法解析窗口
- c# - 使用 Unity JsonUtility 反序列化 JSON 数组无法获取序列化值
- amazon-web-services - Best Way to manage AWS Access key ? So that when an employee leave the company . The employ should not be able to access the AWS account
- python - 如何使用枕头的 python 库实现图像通道删除
- mysql - 是否可以在 Mysql 中获取列名?
- python - setup.py install_requires 查找本地 src 包
- node.js - 如何将原始 JavaScript 代码写入 Node.js 中的文件?