Hopefully this isn't a repeat, but there are 5000+ questions here with "not all code paths return a value"!
Quite simply, why does this method with a non-generic implementation compile just fine:
public static async Task TimeoutAfter(this Task task, int millisecondsTimeout)
{
if (task == await Task.WhenAny(task, Task.Delay(millisecondsTimeout)))
await task;
else
throw new TimeoutException();
}
while this attempt to make the method generic generates a Return state missing
/ ...not all code paths return a value
warning / error?:
public static async Task<T> TimeoutAfter<T>(this Task<T> task, int millisecondsTimeout)
{
if (task == await Task.WhenAny(task, Task.Delay(millisecondsTimeout)))
await task;
else
throw new TimeoutException();
}