Q:

Pass a Func into generic method via reflection

I have a class that implements
class MessageBus
{
    void Subscribe<T>(Func<T,Task> onMessage) {...}
}

In my code, I want to dynamically subscribe with several different message types. 
E.g. I have message type:
class Message {}
class MessageA : Message {}
class MessageB : Message {}

I write code similar to this:
class MySubscriber
{
    void Initialize()
    {
         var mb = new MessageBus();
         var mbt = mb. GetType();
         var subscribeGeneric = mbt. GetMethods().First(x => x.Name == "Subscribe" && x.GetParameters().Length == 1);

         var subscribeConcrete = subscribeGeneric. MakeGenericMethod(typeof(Message1));
         subscribeConcrete. Invoke(mb, new object[]{ new Func<Message1,Task>(Handle) });
         // On this line I get exception TargetException("Type does not meet target type").  Message my be a bit different, on my system I see it in Russian. 
    }
    Task Handle(Message msg) {}    
}

Of course in this example it does not make sens to call via reflection, but in real program I get typeof(Message1) dynamically, and I get an array of those types. 
What am I doing wrong?  If write all the same normally, it works (i.e. Handle(Message) successfully cast to Handle(Message1) and is getting called. 
Update: so the code above is correct and should work.  In my program, I simply had a typo, and was invoking the method on the wrong object. 

A:

Solved with help from comments. 
I've created a separate minimal reproducer and it worked.  Then examined original code and found a typo.  So the basic idea was correct from the start.