在c#中调用异步方法的调用

时间:2010-05-07 09:13:55

标签: c# events

说我有4个班级

  • ControllerClass
  • MethodClass1
  • MethodClass2
  • MethodClass3

并且每个MethodClass都有一个异步方法DoStuff(),每个方法都有一个CompletedEvent。

ControllerClass负责以特定顺序调用3个MethodClasses 上的3个异步方法。

因此,ControllerClass调用MethodClass1.DoStuff()并订阅MethodClass1.CompletedEvent。当触发该事件时,ControllerClass调用MethodClass2.DoStuff()并订阅MethodClass2.CompletedEvent。触发该事件时,ControllerClass调用MethodClass3.DoStuff()

这样的情况有最好的做法吗?这是不好的设计吗?

我相信这是因为

  • 我发现难以进行单元测试(确定标志)
  • 改变订单并不容易
  • 我有一种不安的,有代号味道的感觉

在这种情况下有哪些替代方案?

注意:我的目标是.NET 2.0框架

5 个答案:

答案 0 :(得分:1)

Jeff Richter撰写了一篇关于使用枚举器来简化APM代码的精彩文章。 Microsoft CCR也使用类似的技术。值得调查:

http://msdn.microsoft.com/en-us/magazine/cc546608.aspx

答案 1 :(得分:1)

如果您可以访问要调用的类的代码,并且还可以自由地更改它,那么为什么不将它包装在处理程序中(实现Chain of Responsibility模式)。然后,您可以为每个方法定义后继。这将使复杂性降低,具有更高的灵活性。

答案 2 :(得分:0)

我们使用的是什么版本的.NET?在.NET 4.0中,有一个Task类,您可以使用它来触发任务,并且可以非常轻松地更改顺序。

这里有一个很好的例子:http://blogs.msdn.com/pfxteam/

您可以看到如何排队任务。

答案 3 :(得分:0)

这样做是没有意义的。异步调用一个辅助方法。它应该调用您正在异步运行的三种方法。对它们进行排序现在很简单,你只需要一个异步方法来担心。更有效率,您不再启动并在线程之间切换。它实际上需要更少的时间。

答案 4 :(得分:-1)

由于您使用的三种方法需要按特定顺序运行并且需要彼此等待,为什么还要异步调用它们呢?只需进行简单的同步调用即可。