如何顺序执行异步操作?

时间:2011-02-15 14:12:04

标签: c# silverlight

现在我正在使用类似于这种结构的东西

A.Completed += () =>
{ B.Completed += () =>
  {  C.Completed += () =>
     {
       //
     }
     C();
   }
   B();
 }  
 A();

并不是很满意。是否有更好,更清洁的方式来执行此类后续/并发操作执行?

我看一下Rx框架,但是它专为其他任务而设计,对我的问题来说看起来有点过分。

5 个答案:

答案 0 :(得分:8)

除非有人在A完成之前实际调用B或C,否则无需嵌套设置已完成事件。如果你把它分开,这就是它的样子:

A.Completed += () => { B(); };
B.Completed += () => { C(); };  
C.Completed += () => { //   }; 

A();

我认为删除嵌套实际上会使它更清洁。

答案 1 :(得分:4)

看看ReactiveUI。它基于Rx,将大大简化您的代码。以下是一个示例:Calling Web Services in Silverlight using ReactiveXaml

答案 2 :(得分:2)

你可以看看TPL。你可以像这个帖子一样编写代码:link

答案 3 :(得分:1)

它不是很多更干净,但您可能会看一下BackgroundWorker

BackgroundWorker A = new BackgroundWorker();
A.DoWork += (s, e) => AMethod();
A.RunWorkerCompleted += (s, e) => BMethod();

BackgroundWorker B = new BackgroundWorker();
B.RunWorkerCompleted += (s, e) => CMethod();

//etc

你并没有真正减少代码,但我会说它更清洁了。

答案 4 :(得分:1)