В настоящее время мне нужно интегрировать множество вызовов веб-служб в Silverlight, которые выполняют вызовы, подобные приведенному ниже коду. Взаимодействие с пользователем не должно быть возможным, пока загрузка всех 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 (все управляется событиями) я не могу этого сделать.
У меня вопрос: есть ли более элегантное решение или, возможно, шаблон для разработки, ориентированный на .NET, для рефакторинга того, что у меня есть, от одного метода делегата, вызывающего другой метод, вызывающего другой, к чему-то, чем легче управлять?
Одна из моих самых больших проблем с кодом - фактический вызов метода происходит после основной работы делегата.