Rx.Net:在SelectMany中调用多个IObservable

编程入门 行业动态 更新时间:2024-10-26 14:34:28
本文介绍了Rx.Net:在SelectMany中调用多个IObservable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

请注意:这是问题较早发布,但感兴趣的解决方案却有不同的情况.

Please Note: This is continuation of the question posted earlier but the solution of interest is of a different situation.

我试图多次调用各自返回IObservable的方法,但在SelectMany语句中返回的值是一个Task,因此下面的Subscribe语句无法编译.

I am trying to make multiple calls to the methods that each return IObservable but the values being returned back in the SelectMany statement is a Task and hence the following Subscribe statement does not compile.

这是代码段

var myWorkList = new List<MyWork> { new MyWork(),// MyWork.Execute(data) returns IObservable new MyWork() }.ToObservable(); var results = myService .GetData(accountId) .SelectMany(data => myWorkList.ForEachAsync(r => r.Execute(data)) .Subscribe(result => { Console.WriteLine($"Result Id: {result.Id}"); Console.WriteLine($"Result Status: {result.Pass}"); });

推荐答案

您只想使用.SelectMany.试试这个:

You just want to use .SelectMany. Try this:

var myWorkList = new List<MyWork>() { new MyWork(), new MyWork() }.ToObservable(); var query = from data in myService.GetData(accountId) from myWork in myWorkList from result in myWork.Execute(data) select result; var results = query .Subscribe(result => { Console.WriteLine($"Result Id: {result.Id}"); Console.WriteLine($"Result Status: {result.Pass}"); });

这是我的测试代码:

public static class myService { public static IObservable<MyData> GetData(int x) => Observable.Return(new MyData()); } public class MyWork { public virtual IObservable<MyResult> Execute(MyData data) { return from isMatch in IsMatch(data) where isMatch select new MyResult() { Id = 1, Pass = true }; } public IObservable<bool> IsMatch(MyData data) { return Observable.Return(true); } } public class MyResult { public int Id; public bool Pass; } public class MyData { }

当我执行我得到这个:

Result Id: 1 Result Status: True Result Id: 1 Result Status: True

在对上一个问题的评论中,我建议将此作为代表列表进行.方法如下:

In the comments on your previous question I suggested doing this as a list of delegates. Here's how:

var myWorkList = new Func<MyData, IObservable<MyResult>>[] { md => new MyWork().Execute(md), md => new MyWork().Execute(md), }.ToObservable(); var query = from data in myService.GetData(accountId) from myWork in myWorkList from result in myWork(data) select result;

您得到相同的结果.

更多推荐

Rx.Net:在SelectMany中调用多个IObservable

本文发布于:2023-11-06 09:43:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1563343.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   Net   Rx   IObservable   SelectMany

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!