我已经从可枚举对象创建了一个可观察对象。
var enumerable = CreateMyVeryOwnEnumerable();
var obs = enumerable.ToObservable();
var observableOfList = obs.ToList();
observableOfList.Subscribe(o => Console.Write(o));
我遇到的问题是Console.Write永远不会被击中。
可能是什么问题?可枚举的永远不会结束吗?
在您的代码中:
如果"CreateMyVeryOwnEnumerable"创建了一个非终止的IEnumerable,那么任何完全需要所有结果值的调用都将永远阻塞-如果在IEnumeraable上调用ToList()、Min()、Max()、Reverse()等,就会发生这种情况。
如果"CreateMyVeryOwnEnumerable"给出了一个终止的IEnumerable,则Console.Write调用会被List实例击中;
修复
如果您的目标是使用Subscribe消耗(打印)enumerable的每个值,那么您可以使用:
static void Main()
{
var enumerable = CreateMyVeryOwnEnumerable();
var obs = enumerable.ToObservable();
obs.Subscribe(o => Console.WriteLine(o));
Console.ReadKey();
}
static IEnumerable<int> CreateMyVeryOwnEnumerable()
{
// non-terminating
while (true)
yield return 0;
// terminating
//return Enumerable.Range(0, 100);
}
但是,请注意,如果原始可枚举对象未终止,Subscribe调用现在将被阻止。再多的按键混搭也无法关闭控制台窗口。
如果您的目标是在subscribe方法中实际使用List,那么您别无选择,只能使它终止。