System.Dynamic bug?

Enquanto brincava com a dinâmica do C # 4.0, descobri coisas estranhas acontecendo com o código assim:

using System.Dynamic;

sealed class Foo : DynamicObject
{
    public override bool TryInvoke(
        InvokeBinder binder, object[] args, out object result)
    {
        result = new object();
        return true;
    }

    static void Main()
    {
        dynamic foo = new Foo();

        var t1 = foo(0);
        var t2 = foo(0);
        var t3 = foo(0);
        var t4 = foo(0);
        var t5 = foo(0);
    }
}

Ok, funciona, mas ... dê uma olhada na janela do IntelliTrace:

captura de tela http://img717.imageshack.us/img717/4914/10435230.png

Portanto, toda invocação (e outras operações também em objetos dinâmicos) causa lançamentos e capturas de exceções estranhas duas vezes!

Entendo que, às vezes, o mecanismo de exceções pode ser usado para otimizações, por exemplo, a primeira chamada para dinâmica pode ser realizada para algum delegado de stub, que simplesmente gera exceção - isso pode ser como um sinal para o fichário dinâmico para resolver um membro correto e apontar novamente delegar. A próxima chamada para o mesmo delegado será realizada sem nenhuma verificação.

Mas ... o comportamento do código acima parece muito estranho. Talvez lançar e capturar exceções duas vezes por qualquer operação no DynamicObject - é um erro?

questionAnswers(2)

yourAnswerToTheQuestion