Первый Foo1
возвращает задачу, завернутую в задачу.
async Task Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
Это потому, что async Task
сигнатура обернет результат в Task
как возвращаемое значение. Это происходит потому, что вы не ожидаете результата. Правильный тип возврата в сигнатуре должен быть Task<Task>
, а не Task>
, потому что код что-то возвращает (в данном случае Задача).
async Task<Task> Foo1()
{
await BarAsync();
return SomeFuncAsync();
}
Как только вы исправите тип возврата в этом методе, разница между ним и следующим методом станет более очевидной. Первый возвращает Task
, завернутый в Task
, а следующий просто возвращает Task
.