I\'ve just been playing around with async/await and found out something interesting. Take a look at the examples below:
// 1) ok - obvious public Task
Just think about your types. Task is not variant, so it's not convertible to Task, even if T : U.
Task
T : U
However, if t is Task, then the type of await t is T, and T can be converted to U if T : U.
t
await t
T
U