例如:
public void foo()
{
// Do stuff!
// Delayed call to bar() after x number of ms
// Do more Stuff
}
public void bar()
{
// Only execute once foo has finished
}
我知道可以通过使用定时器和事件处理程序来实现这一点,但是我想知道是否有一种标准的C#方法来实现这一点?
如果有人好奇,这是因为foo()和bar()在不同(单例)类中,它们可能需要在特殊情况下相互调用。问题在于这是在初始化时完成的,所以foo需要调用bar,而bar需要一个正在创建的foo类的实例...因此需要延迟调用bar()以确保foo完全实例化。重新阅读这个问题几乎让人感到糟糕的设计!
编辑
我会考虑这些关于糟糕设计的观点!我一直认为我可以改善系统,然而,这种令人不悦的情况仅当发生异常时才会发生,在所有其他时间里,这两个单例非常好地共存。我认为我不会拖延使用nasty async-patters,而是会重构其中一个类的初始化。
Awake
和Start
两个阶段。在Awake
阶段,你可以配置自己,在此阶段结束时所有对象都已初始化完成。在Start
阶段,对象可以开始相互通信。 - cod3monk3y