我目前不得不在 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 为中心的设计模式,用于将我所拥有的东西从一个调用另一种方法、调用另一种方法的委托方法重构为更易于管理的东西?
我对代码的最大问题之一是实际的方法调用是在委托的大部分工作之后进行的。