I have the following interface:
public interface IValidationSystem<T>
{
    IAsyncEnumerable<ValidationResult> ValidateAsync(T obj);
}
And I am trying to implement it this way:
public class Foo
{ }
public class Bar
{ }
public class BarValidationSystem : IValidationSystem<T>
{   
    public async IAsyncEnumerable<ValidationResult> ValidateAsync(Bar bar)
    {
        var foo = await GetRequiredThingAsync();
        return GetErrors(bar, foo).Select(e => new ValidationResult(e)).ToAsyncEnumerable();
    }
    private static IEnumerable<string> GetErrors(Bar bar, Foo foo)
    {
        yield return "Something is wrong";
        yield return "Oops something else is wrong";
        yield return "And eventually, this thing is wrong too";
    }
    
    private Task<Foo> GetRequiredThingAsync()
    {
        return Task.FromResult(new Foo());
    }
}
But this does not compile:
CS1622 Cannot return a value from an iterator. Use the yield return statement to return a value, or yield break to end the iteration.
I know I can fix by iterating the enumerable:
foreach (var error in GetErrors(bar, foo))
{
    yield return new ValidationResult(error);
}
Or by returning a Task<IEnumerable<ValidationResult>>:
public async Task<IEnumerable<ValidationResult>> ValidateAsync(Bar bar)
{
    var foo = await GetRequiredThingAsync;
    return GetErrors(bar, foo).Select(e => new ValidationResult(e));
}
But I would like to understand why I cannot return an IAsyncEnumerable in my case. When writing "classic" IEnumerable methods, you can either return an IEnumerable or yield return several values. Why am I not allowed to do the same with IAsyncEnumerable?