对Observable.ToList()的订阅未启动



我已经从可枚举对象创建了一个可观察对象。

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,那么您别无选择,只能使它终止。

相关内容

  • 没有找到相关文章

最新更新