Надеюсь, это не повторение, но здесь есть более 5000 вопросов с «не все пути кода возвращают значение»!
Проще говоря, почему этот метод с неуниверсальной реализацией прекрасно компилируется:
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();
}
в то время как эта попытка сделать метод универсальным генерирует предупреждение/ошибку Return state missing
/...not all code paths return a value
?:
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();
}
Task
и ... - person Chris Laplante   schedule 24.08.2012