【问题标题】:How to convert an IEnumerable<Task<T>> to IObservable<T>如何将 IEnumerable<Task<T>> 转换为 IObservable<T>
【发布时间】:2012-11-21 19:15:03
【问题描述】:

是否有内置方法可以将 IEnumerable> 转换为 IObservable。顺序并不重要,只要我得到东西,虽然最好是完成后。

如果它还不存在,有什么好的方法可以完成它?

【问题讨论】:

    标签: c# .net linq .net-4.0 system.reactive


    【解决方案1】:

    我相信这会奏效

    tasks.Select(t => Observable.FromAsync(() => t))
         .Merge();
    

    每个任务都会按照它们完成的顺序将其结果发送到可观察序列。您可以订阅序列并以这种方式对结果做任何您想做的事情。

    【讨论】:

      【解决方案2】:

      你可以这样做:

      var query = tasks.ToObservable().SelectMany(task => task.ToObservable());
      

      或者,或者,像这样:

      var query =
          from t in tasks.ToObservable()
          from i in t.ToObservable()
          select i;
      

      【讨论】:

        【解决方案3】:

        我相信你要找的可能是Observable.Start()

        然后您可以将.Subscribe(callbackMethod) 附加到末尾并在需要时指定回调。

        【讨论】:

          【解决方案4】:

          从 Rx 2.0 开始,有一个稍微简单的方法:

          var query = tasks.ToObservable().Merge();
          

          【讨论】:

            猜你喜欢
            • 2013-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多