Por que o retorno do rendimento não pode aparecer dentro de um bloco try com um catch?

O seguinte é bom:

try
{
    Console.WriteLine("Before");

    yield return 1;

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

ofinally O bloco é executado quando a coisa toda termina de ser executada (IEnumerator<T> suportaIDisposable para fornecer uma maneira de garantir isso, mesmo quando a enumeração for abandonada antes de terminar).

Mas isso não está bem:

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);
}

Suponha (por uma questão de argumento) que uma exceção seja lançada por um ou outroWriteLine chamadas dentro do bloco try. Qual é o problema de continuar a execução nocatch quadra?

Obviamente, a parte de retorno de rendimento é (atualmente) incapaz de jogar qualquer coisa, mas por que isso deveria nos impedir de ter um anexotry/catch para lidar com exceções lançadas antes ou depois de umyield return?

Atualizar: Há umacomentário interessante de Eric Lippert aqui - parece que eles já têm problemas suficientes para implementar o comportamento try / finalmente corretamente!

EDIT: A página MSDN neste erro é:http://msdn.microsoft.com/en-us/library/cs1x15az.aspx. Mas não explica o porquê.

questionAnswers(5)

yourAnswerToTheQuestion