【发布时间】:2009-02-13 10:51:41
【问题描述】:
有没有一种很好的简单方法可以在让线程继续执行的同时延迟函数调用?
例如
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 ,它需要一个正在创建的 foo 类的实例......因此延迟调用 bar() 以确保 foo 完全实例化......读回来几乎是糟糕的设计!
编辑
我会根据建议对糟糕的设计提出意见!我一直认为我可以改进系统,但是,这种讨厌的情况仅在抛出异常时发生,在所有其他时间两个单例很好地共存。我认为我不会乱用讨厌的异步模式,而是要重构其中一个类的初始化。
【问题讨论】:
-
你需要修复它,但不是使用线程(或任何其他异步实践)
-
必须使用线程来同步对象初始化是您应该采取另一种方式的标志。 Orchestrator 似乎是更好的选择。
-
复活! -- 对设计进行评论,您可以选择进行两阶段初始化。借鉴 Unity3D API,有
Awake和Start阶段。在Awake阶段,你自己配置,在这个阶段结束时所有对象都被初始化。在Start阶段,对象可以开始相互通信。 -
接受的答案需要更改