using System.Threading.Tasks;
public static async Task Main()
var source = Enumerable.Range(1, 10);
var options = new ParallelOptions() { MaxDegreeOfParallelism = 5 };
var task = Parallel.ForEachAsync(source, options, async (item, token) =>
await Task.Delay(100, token);
if (item == 5) throw new ApplicationException("Oops!");
await Task.Delay(100, token);
catch when (task.IsFaulted)
foreach (var error in task.Exception.InnerExceptions)
Console.WriteLine($"{error.GetType().Name}: {error.Message}");