Comportamiento extraño con acciones, variables locales y recolección de basura en MVVM light Messenger

Estoy teniendo un problema realmente extraño con elMessenger sistema en MVVM Light. Es difícil de explicar, así que aquí hay un pequeño programa que demuestra el problema:

using System;
using GalaSoft.MvvmLight.Messaging;

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var prog = new Program();
            var recipient = new object();

            prog.RegisterMessageA(recipient);
            prog.RegisterMessageB(recipient);

            prog.SendMessage("First Message");
            GC.Collect();
            prog.SendMessage("Second Message");
        }

        public void RegisterMessageA(object target)
        {
            Messenger.Default.Register(this, (Message msg) =>
            {
                Console.WriteLine(msg.Name + " recieved by A");
                var x = target;
            });
        }

        public void RegisterMessageB(object target)
        {
            Messenger.Default.Register(this, (Message msg) =>
            {
                Console.WriteLine(msg.Name + " received by B");
            });
        }

        public void SendMessage(string name)
        {
            Messenger.Default.Send(new Message { Name = name });
        }

        class Message
        {
            public string Name { get; set; }
        }
    }
}

Si ejecuta la aplicación, esta es la salida de la consola:

First Message recieved by A
First Message received by B
Second Message received by B

Como puede ver, el segundo mensaje nunca es recibido por el destinatario A. Sin embargo, la única diferencia entre B y A es una línea: la declaraciónvar x = target;. Si eliminas esta línea,A recibe el segundo mensaje.

Además, si eliminasGC.Collect(); entoncesA recibe el segundo mensaje. Sin embargo, esto solo oculta el problema, ya que en un programa real el recolector de basura se ejecutará automáticamente eventualmente.

¿Por qué está pasando esto? Supongo que, de alguna manera, si la acción del destinatario se refiere a una variable de la que contiene el alcance del método, vincula la vida útil de la acción a ese alcance para que una vez fuera del alcance se pueda recolectar basura. No entiendo por qué esto es en absoluto. Tampoco entiendo por qué las acciones que no hacen referencia a variables del alcance en el que están definidas no tienen este problema.

¿Alguien puede explicar lo que está pasando aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta