【发布时间】:2010-07-19 20:58:28
【问题描述】:
我目前不得不在 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 为中心的设计模式,用于将我所拥有的东西从一个委托方法调用另一个方法、调用另一个方法重构为更易于管理的东西?
我对代码的最大问题之一是实际的方法调用是在委托中的大部分工作之后进行的。
【问题讨论】:
标签: c# design-patterns delegates anonymous-methods