我已经从可枚举中创建了一个observable。
var enumerable = CreateMyVeryOwnEnumerable();
var obs = enumerable.ToObservable();
var observableOfList = obs.ToList();
observableOfList.Subscribe(o => Console.Write(o));
我遇到的问题是Console.Write永远不会被命中。
可能是什么问题?可能是可枚举永远不会结束吗?
答案 0 :(得分:1)
如果'CreateMyVeryOwnEnumerable'创建了一个非终止的IEnumerable,那么任何完全需要所有结果值的调用将永远阻塞 - 如果你调用ToList(),Min(),Max(),Reverse()会发生这种情况IEnumerable上的等等。
如果'CreateMyVeryOwnEnumerable'给出终止IEnumerable,则使用List实例命中Console.Write调用;
如果你的目标是使用Subscribe只消耗(打印)可枚举的每个值,那么你可以使用:
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调用现在会阻止。没有任何关键的糖化将关闭控制台窗口。
如果您的目标是在订阅方法中实际使用List,那么您别无选择,只能终止它。