public void MyTest()
{
bool eventFinished = false;
myEventRaiser.OnEvent += delegate { doStuff(); eventFinished = true; };
myEventRaiser.RaiseEventInSeperateThread()
while(!eventFinished) Thread.Sleep(1);
Assert.That(stuff);
}
为什么eventFinished不能是volatile的?这有关紧凑代码中运行时优化的问题。在while循环中,编译器或运行时可能会变得太聪明,知道eventFinished只能为false。特别是当你考虑一个被提升的变量作为类的成员和委托作为同一类的方法时,这种情况就会出现。这将剥夺优化器eventFinished曾经是局部变量的事实。