public static async Task ForAllAsync <T>(this IEnumerableAsync <T> items, T action) { var iterator = items.GetIterator(); await iterator.IterateAsync(action); // while (await enumerator.MoveNextAsync(action)) { }; }
public static IEnumerableAsync <T> PrespoolAsync <T>(this IEnumerableAsync <T> items) { var iterator = items.GetIterator(); var queue = new ConcurrentQueue <Func <T, Task> >(); var totalExpression = GetTotalExpression <T>(); var basicExpression = totalExpression(queue); var iterationTask = iterator.IterateAsync(basicExpression); return(EnumerableAsync.YieldAsync <T>( async(yieldAsync) => { while (!iterationTask.IsCompleted || queue.Count() > 0) { Func <T, Task> callback; if (queue.TryDequeue(out callback)) { await callback(yieldAsync); } } })); }