Await the result of Task<TDerived> using reflection in a non-generic method
<p>Consider the following case:</p>

<pre><code>class A
{
    public int Id;
}

class B : A
{

}

class Main
{
    public async Task&lt;int&gt; Create(Type type)
    {
        MethodInfo method = this.GetType().GetMethod("Create", new Type[] { typeof(string) }).MakeGenericMethod(new Type[] { type });
        A a = await (Task&lt;A&gt;)method.Invoke(this, new object[] { "humpf" });
        return a.Id;
    }

    public async Task&lt;T&gt; Create&lt;T&gt;(string name) where T : A
    {
        T t = await Foo.Bar&lt;T&gt;(name);
        return t;
    }
}
</code></pre>

<p>Calling <code>new Main().Create(typeof(B))</code> will fail with a </p>

<blockquote>
  <p>Unable to cast object of type '<code>System.Threading.Tasks.Task[B]</code>' to
  type '<code>System.Threading.Tasks.Task[A]</code>'</p>
</blockquote>

<p>I don't quite understand because in this case, the Generic <code>Create&lt;T&gt;</code> method can only return a <code>Task&lt;T&gt;</code> where <code>T</code> is always derived from '<code>A</code>', but maybe I'm missing an edge case here.
Besides that, how can I make this work? Thanks!</p>