我们如何在WCF中使用RX框架来实现长时间运行的进程和频繁的UI更新

本文关键字:进程 运行 长时间 更新 UI 实现 WCF 框架 RX 我们 | 更新日期: 2023-09-27 17:54:42

最近我开始了解Rx框架,看起来很有前途。我对此表示怀疑。假设从我的UI(可能是winforms或web页面),我调用webservice并发送一个列表。我的调用就像-> myWCFServiceMethod(List empLists)。在这个服务方法中,对于每个雇员对象,我需要再次进行另一个服务调用并获得结果,并执行一些DB操作[保存和更新],最后将每个雇员的状态发送回客户端。对于列表中的每个雇员,我必须并行地执行相同的操作。没有先后顺序。

这在Rx框架中是可能的吗?为此,我是否需要为每个员工状态更新实现回调契约回调到客户端UI ?

我用数据网格制作了UI,数据网格有2列。第一个是员工名,第二个是状态列。

当UI加载时,它在网格中加载了100名员工。然后点击开始按钮。因此,我将所有雇员对象打包成一个列表,并将该列表发送给webservice方法。

现在,我正在寻找要做的事情,这是每个过程的状态更新,当一个员工经历不同的过程。类似于并行过程。没有顺序过程。如果一些员工对象可以提前完成工作,而另一些则需要一些时间。所以过程没有先后顺序。任何员工都可以调用自己关联的外部web服务调用,并从中获取结果。如果它得到这样的结果,它就会尝试保存或更新数据库。对于所有这些流程,我希望得到员工正在经历的每个流程的状态通知,并最终完成其工作。

我不明白没有回调合约Rx怎么能做到这一点?

我没有看到任何类似的教程或指导我们如何做到这一点。

请给我指路。

我们如何在WCF中使用RX框架来实现长时间运行的进程和频繁的UI更新

下面是对你问题的快速回答。

要并行调用多个服务,然后在它们返回时获取结果,您需要这样的查询:

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以适应此代码。我希望这给你一个起点。