¿Por qué no puede aparecer el rendimiento del rendimiento dentro de un bloque de prueba con una captura?

Lo siguiente está bien:

try
{
    Console.WriteLine("Before");

    yield return 1;

    Console.WriteLine("After");
}
finally
{
    Console.WriteLine("Done");
}

losfinally el bloque se ejecuta cuando todo ha terminado de ejecutarse (IEnumerator<T> apoyaIDisposable para proporcionar una manera de garantizar esto incluso cuando la enumeración se abandona antes de que finalice).

Pero esto no está bien:

try
{
    Console.WriteLine("Before");

    yield return 1;  // error CS1626: Cannot yield a value in the body of a try block with a catch clause

    Console.WriteLine("After");
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

Supongamos (en aras del argumento) que una u otra de lasWriteLine llamadas dentro del bloque de prueba. ¿Cuál es el problema con continuar la ejecución encatch ¿bloquear?

Por supuesto, la parte de retorno de rendimiento es (actualmente) incapaz de arrojar nada, pero ¿por qué debería eso evitar que tengamos un cerramiento?try/catch para hacer frente a las excepciones lanzadas antes o después de unyield return?

Actualizar: Hay uninteresante comentario de Eric Lippert aquí ¡Parece que ya tienen suficientes problemas para implementar el comportamiento try / finalmente correctamente!

EDITAR: La página de MSDN en este error es:http://msdn.microsoft.com/en-us/library/cs1x15az.aspx. Sin embargo, no explica por qué.

Respuestas a la pregunta(5)

Su respuesta a la pregunta