public override async ValueTask DisposeAsync() { if (_enumerators != null) { var n = _enumerators.Length; var disposes = new ValueTask[n]; for (var i = 0; i < n; i++) { var dispose = _enumerators[i].DisposeAsync(); disposes[i] = dispose; } await Task.WhenAll(disposes.Select(t => t.AsTask())).ConfigureAwait(false); _enumerators = null; } await base.DisposeAsync().ConfigureAwait(false); }