Csharp/C#教程:链式异步/事件调用是否有一个有用的设计模式?分享


链式异步/事件调用是否有一个有用的设计模式?

我目前不得不在Silverlight中集成大量的Web服务调用,这些调用类似于下面的代码。 在完成所有3的加载之前,不可能进行任何用户交互。

// In my view, having standard delegate methods (non-anonymous) makes the // code below even messier. // I've left out the EventArgs to shorten the example however // I usually use these objects in the delegate method. MyService1 service1 = new MyService1(); service1.GetAllUsersCompleted += delegate { MyService2 service2 = new MyService2(); service2.AnotherTaskCompleted += delegate { MyService3 service3 = new MyService3(); service3.YetAnotherTaskCompleted += delegate { // etc. }; service3.YetAnotherTask(); }; service2.AnotherTask(); }; service1.GetAllUsers(); 

本质上我希望调用是同步的,但是由于Silverlight中的Web服务代理类的体系结构(一切都是事件驱动的)我不能这样做。

我的问题是,是否有一个更优雅的解决方案或可能是一个以.NET为中心的设计模式,用于重构我从一个委托方法调用另一个方法,调用另一个方法,变成更容易管理的东西?

我在代码中遇到的最大问题之一是在委托中的大部分工作之后发生的实际方法调用。

好吧,我建议首先通过同时运行所有三个调用来利用Silverlight的异步特性,如果可能的话。

您可以使用任务(特别是任务延续)“按顺序”执行此操作,但您可能还需要查看Rx库 ,该库旨在优雅地处理此类情况。

另一个最后提示:不建议禁止用户交互。 至少让他们选择取消操作。

我认为这是新任务(在并行库中)类尝试抽象,但我可能是错的:)

我可能在这里错了,但不是代表已经同步。 您可以使用BeginInvoke方法使它们异步。 这是同步和异步方法调用的一个很好的资源,并解释了一些模式等.http://support.microsoft.com/kb/315582

文章的标题可能是如何异步调用Visual C#方法,但有一半的同步方法调用的例子。

上述就是C#学习教程:链式异步/事件调用是否有一个有用的设计模式?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1001696.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐