我想非忙等待变量变为非空:
while (true)
{
if (myStaticVar != null)
{
break;
}
}
myStaticVar.DoSomething();
任何线程都可以随时设置myStaticVar
。
我坚持.net 4,所以我不能使用async / await。
答案 0 :(得分:0)
正确的解决方案是让您的线程通过.NET同步原语(如AutoResetEvent
)进行通信。可以在SO上找到大量示例,例如here。
也就是说,手动线程同步是一个难题,很容易出错。如果您的代码不是时间关键的,并且您更喜欢简单的“忙碌等待”,那么请不要忘记在这样做时节省处理器时间。在循环中添加一些Thread.Sleep
或使用SpinWait.SpinUntil。
答案 1 :(得分:0)
您可以将变量转换为属性,并使用set访问器调用委托。
void Main()
{
_someAction = () => Console.WriteLine("Hello world!");
myStaticVar = 20;
}
private static Int32 _myStaticVar;
private static Action _someAction;
public static Int32 myStaticVar
{
get
{
return _myStaticVar;
}
set
{
_myStaticVar = value;
if (_someAction != null)
_someAction();
}
}