using System.Threading.Tasks;
public class Derived : Base
public static void Main()
Func<Task<Base>> d = GetBase;
Func<Task<Derived>> e = d;
Task<Base> dd = GetDerived();
Console.WriteLine("Hello World");
public static Task<Base> GetBase()
return Task.FromResult(new Base());
public static Task<Derived> GetDerived()
return Task.FromResult(new Derived());