Prueba de unidad asíncrona de Silverlight

Tengo un problema extraño con el marco de prueba de unidad de Silverlight. El primer método ejecutado falla, cada vez. Tengo una segunda prueba con el mismo código exacto, y pasa. Lo extraño de la primera vez que se llama es que realmente espera el tiempo de espera.y entonces ejecuta la llamada al repositorio (debajo está un PUT de HTTP si te importa). Aquí está el código: el primero falla cada vez, el segundo pasa cada vez:

    [TestMethod]
    public void AuthShouldSucceed()
    {
        var autoResetEvent = new AutoResetEvent(false);

        _authRepository.Authenticate(_username, _password, response =>
        {
            Assert.IsTrue(response);
            autoResetEvent.Set();
        });
        if (!autoResetEvent.WaitOne(Constants.Timeout))
        {
            Assert.Fail("Test timed out.");
        } 
    }

    [TestMethod]
    public void AuthShouldSucceed2()
    {
        var autoResetEvent = new AutoResetEvent(false);

        _authRepository.Authenticate(_username, _password, response =>
        {
            Assert.IsTrue(response);
            autoResetEvent.Set();
        });
        if (!autoResetEvent.WaitOne(Constants.Timeout))
        {
            Assert.Fail("Test timed out.");
        } 
    }

Editar: Mi solución final es una modificación de la solución de Vladmir:

    [TestMethod]
    [Asynchronous]
    public void AuthShouldSucceed()
    {
        var complete = false;
        var result = false;

        _authRepository.Authenticate(_username, _password, response =>
        {
            complete = true;
            result = response;
        });

        EnqueueConditional(() => complete);
        EnqueueCallback(() => Assert.IsTrue(result));
        EnqueueTestComplete();
    }

Respuestas a la pregunta(3)

Su respuesta a la pregunta