using System.Collections.Generic;
using System.Threading.Tasks;
public class ValidationResult
public ValidationResult(string s)
private static async IAsyncEnumerable<int> ThisShouldReturnAsTask()
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 static Task<Foo> GetRequiredThingAsync()
return Task.FromResult(new Foo());
public async IAsyncEnumerable<ValidationResult> ValidateAsync1(Bar bar)
var foo = await GetRequiredThingAsync();
foreach(var vr in GetErrors(bar, foo).Select(e => new ValidationResult(e))
public async Task<IAsyncEnumerable<ValidationResult>> ValidateAsync2(Bar bar)
var foo = await GetRequiredThingAsync();
return GetErrors(bar, foo).Select(e => new ValidationResult(e)).ToAsyncEnumerable();
public async void Exercise()
await foreach(var f in ValidateAsync1(new Bar()))
await foreach(var f in await ValidateAsync2(new Bar()))
public static void Main()
Console.WriteLine("Hello World");