【发布时间】:2020-02-16 16:12:12
【问题描述】:
如何比较以下两者? Rx 是否更强大?
反应式扩展:
var observable = Observable.Create<char>(async (observer, cancel) =>
{
while (true)
{
string line = await sr.ReadLineAsync();
if (line == null)
break;
observer.OnNext(line);
}
});
observable.Subscribe(
c => Console.WriteLine(c.ToString()),
() => end.Dispose());
异步流:
public async void Run(string path)
{
await foreach (var line in TestAsync())
{
Console.WriteLine(line);
}
}
private async IAsyncEnumerable<string> TestAsync()
{
while (true)
{
string line = await sr.ReadLineAsync();
if (line == null)
break;
yield return line;
}
}
【问题讨论】:
-
最显着的区别是异步枚举仍然是基于拉的,而 Rx 提供基于推送的通知。换句话说,Rx 增加了一个维度,时间。如果您的数据已经可以获取,那么 pull 就足够了。如果不是,基于声明式推送的编程通常会产生更简洁的代码。这是一个更详细的blog。
-
Rx 开始使用异步流。异步流在较低级别工作
标签: c# system.reactive c#-8.0 iasyncenumerable