在一个C#控制台应用程序中,使用System.Reactive.Linq,我试图做一个observable,其中每个项目是由另一个observable进行某些处理的字符串结果。 我用字符串和字符创建了一个简单的repro。 警告,这个例子完全是CONTRIVED,重点是嵌套的.Wait()挂起。嵌套的Observable挂在Wait()
class Program
{
static void Main(string[] args)
{
string[] fileNames = { "file1.doxc", "file2.xlsx", "file3.pptx" };
IObservable<string> files = fileNames.ToObservable();
string[] extensions = files.Select(fn =>
{
var extension = fn.ToObservable()
.TakeLast(4)
.ToArray()
.Wait(); // <<<<<<<<<<<<< HANG HERE
return new string(extension);
})
.ToArray()
.Wait();
}
}
同样,这不是我如何找到许多文件名的后缀。 问题是我如何能够生成一个可观察的字符串,其中的字符串是从完整的可观察值计算出来的。
如果我拉出这段代码并单独运行它,它会很好地完成。
var extension = fn.ToObservable()
.TakeLast(4)
.ToArray()
.Wait();
有一些关于异步方法的嵌套的Wait(),我不明白。
如何编码嵌套的异步observables,所以我可以产生一个简单的字符串数组?
感谢
-John
你的方法是**不是**异步:Wait()是一个阻塞操作... 请参阅https://stackoverflow.com/questions/37801699/what-does-the-wait-operator-in-rx -net-do –
你能解释一下为什么你首先使用'Wait()'? –