说我有4个班级
并且每个MethodClass都有一个异步方法DoStuff(),每个方法都有一个CompletedEvent。
ControllerClass负责以特定顺序调用3个MethodClasses 上的3个异步方法。
因此,ControllerClass调用MethodClass1.DoStuff()并订阅MethodClass1.CompletedEvent。当触发该事件时,ControllerClass调用MethodClass2.DoStuff()并订阅MethodClass2.CompletedEvent。触发该事件时,ControllerClass调用MethodClass3.DoStuff()
这样的情况有最好的做法吗?这是不好的设计吗?
我相信这是因为
在这种情况下有哪些替代方案?
注意:我的目标是.NET 2.0框架
答案 0 :(得分:1)
Jeff Richter撰写了一篇关于使用枚举器来简化APM代码的精彩文章。 Microsoft CCR也使用类似的技术。值得调查:
答案 1 :(得分:1)
如果您可以访问要调用的类的代码,并且还可以自由地更改它,那么为什么不将它包装在处理程序中(实现Chain of Responsibility模式)。然后,您可以为每个方法定义后继。这将使复杂性降低,具有更高的灵活性。
答案 2 :(得分:0)
我们使用的是什么版本的.NET?在.NET 4.0中,有一个Task类,您可以使用它来触发任务,并且可以非常轻松地更改顺序。
这里有一个很好的例子:http://blogs.msdn.com/pfxteam/
您可以看到如何排队任务。
答案 3 :(得分:0)
这样做是没有意义的。异步调用一个辅助方法。它应该调用您正在异步运行的三种方法。对它们进行排序现在很简单,你只需要一个异步方法来担心。更有效率,您不再启动并在线程之间切换。它实际上需要更少的时间。
答案 4 :(得分:-1)
由于您使用的三种方法需要按特定顺序运行并且需要彼此等待,为什么还要异步调用它们呢?只需进行简单的同步调用即可。