最近我开始了解Rx框架,看起来很有前途。我对此表示怀疑。假设从我的UI(可能是winforms或web页面),我调用webservice并发送一个列表。我的调用就像-> myWCFServiceMethod(List empLists)。在这个服务方法中,对于每个雇员对象,我需要再次进行另一个服务调用并获得结果,并执行一些DB操作[保存和更新],最后将每个雇员的状态发送回客户端。对于列表中的每个雇员,我必须并行地执行相同的操作。没有先后顺序。
这在Rx框架中是可能的吗?为此,我是否需要为每个员工状态更新实现回调契约回调到客户端UI ?
我用数据网格制作了UI,数据网格有2列。第一个是员工名,第二个是状态列。
当UI加载时,它在网格中加载了100名员工。然后点击开始按钮。因此,我将所有雇员对象打包成一个列表,并将该列表发送给webservice方法。
现在,我正在寻找要做的事情,这是每个过程的状态更新,当一个员工经历不同的过程。类似于并行过程。没有顺序过程。如果一些员工对象可以提前完成工作,而另一些则需要一些时间。所以过程没有先后顺序。任何员工都可以调用自己关联的外部web服务调用,并从中获取结果。如果它得到这样的结果,它就会尝试保存或更新数据库。对于所有这些流程,我希望得到员工正在经历的每个流程的状态通知,并最终完成其工作。
我不明白没有回调合约Rx怎么能做到这一点?
我没有看到任何类似的教程或指导我们如何做到这一点。
请给我指路。
下面是对你问题的快速回答。
要并行调用多个服务,然后在它们返回时获取结果,您需要这样的查询:
var query =
from index in indexes.ToObservable()
from result in webServiceCall(index)
select new { index, result };
webServiceCall
的签名看起来像IObservable<R> webServiceCall(I index)
。
然后使用:
执行查询query.Subscribe(ir =>
{
// Do stuff with ir.index and ir.result
});
专注于实现webServiceCall
以适应此代码。我希望这给你一个起点。