code/KustoCopyConsole/TaskHelper.cs (32 lines of code) (raw):

using System.Collections.Immutable; namespace KustoCopyConsole { internal static class TaskHelper { public static async Task WhenAllWithErrors(params IEnumerable<Task> tasks) { var remainingTasks = tasks.ToImmutableArray(); while (remainingTasks.Any()) { await Task.WhenAny(remainingTasks); var isCompletedSnapshot = remainingTasks .Select(t => t.IsCompleted) .ToImmutableArray(); var zipped = remainingTasks .Zip(isCompletedSnapshot, (t, i) => new { Task = t, IsCompleted = i }); var completedTasks = zipped .Where(z => z.IsCompleted) .Select(z => z.Task); var incompletedTasks = zipped .Where(z => !z.IsCompleted) .Select(z => z.Task); // This will raise errors if need be await Task.WhenAll(completedTasks); // Continue with incompleted tasks remainingTasks = incompletedTasks.ToImmutableArray(); } } } }