diff --git a/src/Task/Polyfills/ListExtensions.cs b/src/Task/Polyfills/ListExtensions.cs index 61a102f..c97b6ad 100644 --- a/src/Task/Polyfills/ListExtensions.cs +++ b/src/Task/Polyfills/ListExtensions.cs @@ -51,22 +51,23 @@ public static async Task ForEachAsync( if (body == null) throw new ArgumentNullException(nameof(body)); if (degreeOfParallelism < 1) throw new ArgumentOutOfRangeException(nameof(degreeOfParallelism), "Degree of parallelism must be at least 1."); - var semaphore = new SemaphoreSlim(degreeOfParallelism); - - var tasks = source.Select(async item => + using (var semaphore = new SemaphoreSlim(degreeOfParallelism)) { - await semaphore.WaitAsync(); - try - { - await body(item); - } - finally + var tasks = source.Select(async item => { - semaphore.Release(); - } - }); + await semaphore.WaitAsync().ConfigureAwait(false); + try + { + await body(item).ConfigureAwait(false); + } + finally + { + semaphore.Release(); + } + }); - await Task.WhenAll(tasks); + await Task.WhenAll(tasks).ConfigureAwait(false); + } } } }