Aguardando o acionamento de eventos nos testes da unidade do Silverlight

Estou usando o Silverlight Unit Testing Framework para testar algumas classes do View Manager. Alguns testes exigemPropertyChanged eventos a serem disparados.

Atualmente estou usando uma combinação deEnqueueConditional eWaitHandles

Exemplo 1

[TestMethod]
[Asynchronous]
[Timeout(1000)]
public void TestNotificationExample()
{
    var manager = new UserManager();

    var waitHandle = new ManualResetEvent(false);
    manager.PropertyChanged += (sender, propChangArgs) =>
                                {
                                    waitHandler.Set();
                                };
    manager.DoTheThingThatTriggersNotification();
    // The notification event fires aynshronously to this
    EnqueueConditional (() => waitHandler.WaitOne(0));
    // Enqueue other tests here....
    EnqueueTestComplete();
}

Isso funciona. Mas eu tenho perguntas me importunando:

Eu realmente preciso usar um WaitHandle? Funcionaria igualmente bem se eu usasse apenas um bool?

Exemplo 2

bool fHasFiredEvent = false;
manager.PropertyChanged += (sender, propChangeArgs) =>
                           { 
                               fHasFiredEvent = true;
                           }
manager.DoTheThingThatTriggersNotification();    
EnqueueConditional (() => fHasFiredEvent);
EnqueueTestComplete();

Ou seria melhor se eu mantivesse o WaitHandle, mas perdesse o TimeoutAttribute e o tempo esgotado no Wait?

Exemplo 3

[TestMethod]
[Asynchronous]
public void TestNotificationExample()
{
    var manager = new UserManager();

    var waitHandle = new ManualResetEvent(false);
    manager.PropertyChanged += (sender, propChangArgs) =>
                                {
                                    waitHandler.Set();
                                };
    manager.DoTheThingThatTriggersNotification();
    EnqueueCallback (() => Assert.IsTrue(waitHandler.WaitOne(1000));
    EnqueueTestComplete();
}

Então agora eu escrevi três exemplos e todos eles funcionam. Então minha última pergunta é

Qual teria o melhor desempenho? (Mesmo que a diferença seja insignificante e seja puramente acadêmica, yada yada yada. É interessante por si só.)Algum dos três exemplos tem falhas fundamentais?

questionAnswers(1)

yourAnswerToTheQuestion