< Summary

Class:Microsoft.Azure.Batch.PagedEnumerableExtensions
Assembly:Microsoft.Azure.Batch
File(s):C:\Git\azure-sdk-for-net\sdk\batch\Microsoft.Azure.Batch\src\PagedEnumerableExtensions.cs
Covered lines:30
Uncovered lines:2
Coverable lines:32
Total lines:126
Line coverage:93.7% (30 of 32)
Covered branches:16
Total branches:18
Branch coverage:88.8% (16 of 18)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
ForEachAsync()-100%100%
ForEachAsync()-80%66.67%
ForEachAsync()-100%100%
ToListAsync()-100%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\batch\Microsoft.Azure.Batch\src\PagedEnumerableExtensions.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License. See License.txt in the project root for license information.
 3
 4using System;
 5using System.Collections.Generic;
 6using System.Threading;
 7using System.Threading.Tasks;
 8
 9namespace Microsoft.Azure.Batch
 10{
 11    /// <summary>
 12    /// Provides a set of static (Shared in Visual Basic) methods for working with sequences that
 13    /// implement <see cref="IPagedEnumerable{T}"/>.
 14    /// </summary>
 15    public static class PagedEnumerableExtensions
 16    {
 17        /// <summary>
 18        /// Iterates over an <see cref="IPagedEnumerable{T}"/> sequence, invoking an asynchronous delegate for each elem
 19        /// </summary>
 20        /// <param name="source">The <see cref="IPagedEnumerable{T}"/> to iterate over.</param>
 21        /// <param name="body">The asynchronous delegate to execute for each element in <paramref name="source"/>.</para
 22        /// <param name="cancellationToken">A <see cref="CancellationToken"/> for controlling the lifetime of the asynch
 23        /// <returns>A <see cref="System.Threading.Tasks.Task"/> that represents the iteration operation. The task
 24        /// completes when iteration is complete.</returns>
 25        /// <remarks>This method processes elements sequentially, not concurrently.  That is, for each element in the
 26        /// sequence, the method awaits the asynchronous delegate before processing the next element.</remarks>
 27        public static async Task ForEachAsync<T>(this IPagedEnumerable<T> source, Func<T, Task> body, CancellationToken 
 28        {
 429            if (source == null)
 30            {
 131                throw new ArgumentNullException("source") ;
 32            }
 333            if (body == null)
 34            {
 135                throw new ArgumentNullException("body");
 36            }
 37
 2838            await source.ForEachAsync((t, ct) => body(t), cancellationToken).ConfigureAwait(false);
 139        }
 40
 41        /// <summary>
 42        /// Iterates over an <see cref="IPagedEnumerable{T}"/> sequence, invoking an asynchronous delegate for each elem
 43        /// </summary>
 44        /// <param name="source">The <see cref="IPagedEnumerable{T}"/> to iterate over.</param>
 45        /// <param name="body">The asynchronous delegate to execute for each element in <paramref name="source"/>.</para
 46        /// <param name="cancellationToken">A <see cref="CancellationToken"/> for controlling the lifetime of the asynch
 47        /// <returns>A <see cref="System.Threading.Tasks.Task"/> that represents the iteration operation. The task
 48        /// completes when iteration is complete.</returns>
 49        /// <remarks>This method processes elements sequentially, not concurrently.  That is, for each element in the
 50        /// sequence, the method awaits the asynchronous delegate before processing the next element.</remarks>
 51        public static async Task ForEachAsync<T>(this IPagedEnumerable<T> source, Func<T, CancellationToken, Task> body,
 52        {
 253            if (source == null)
 54            {
 055                throw new ArgumentNullException("source");
 56            }
 257            if (body == null)
 58            {
 059                throw new ArgumentNullException("body");
 60            }
 61
 262            using (IPagedEnumerator<T> enumerator = source.GetPagedEnumerator())
 63            {
 2864                while (await enumerator.MoveNextAsync(cancellationToken).ConfigureAwait(false))
 65                {
 2766                    cancellationToken.ThrowIfCancellationRequested();
 67
 2668                    await body(enumerator.Current, cancellationToken).ConfigureAwait(false);
 69                }
 170            }
 171        }
 72
 73        /// <summary>
 74        /// Iterates over an <see cref="IPagedEnumerable{T}"/> sequence, invoking a synchronous delegate for each elemen
 75        /// </summary>
 76        /// <param name="source">The <see cref="IPagedEnumerable{T}"/> to iterate over.</param>
 77        /// <param name="body">The delegate to execute for each element in <paramref name="source"/>.</param>
 78        /// <param name="cancellationToken">A <see cref="CancellationToken"/> for controlling the lifetime of the asynch
 79        /// <returns>A <see cref="System.Threading.Tasks.Task"/> that represents the iteration operation. The task
 80        /// completes when iteration is complete.</returns>
 81        /// <remarks>This method processes elements sequentially, not concurrently.  That is, for each element in the
 82        /// sequence, the method completes execution of the delegate before processing the next element.</remarks>
 83        public static async Task ForEachAsync<T>(this IPagedEnumerable<T> source, Action<T> body, CancellationToken canc
 84        {
 985            if (source == null)
 86            {
 187                throw new ArgumentNullException("source");
 88            }
 889            if (body == null)
 90            {
 191                throw new ArgumentNullException("body");
 92            }
 93
 794            using (IPagedEnumerator<T> enumerator = source.GetPagedEnumerator())
 95            {
 5196                while (await enumerator.MoveNextAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false
 97                {
 4698                    cancellationToken.ThrowIfCancellationRequested();
 99
 44100                    body(enumerator.Current);
 101                }
 5102            }
 5103        }
 104
 105        /// <summary>
 106        /// Creates a <see cref="List{T}" /> from an <see cref="IPagedEnumerable{T}"/>.
 107        /// </summary>
 108        /// <param name="source">The <see cref="IPagedEnumerable{T}"/> to create a list from.</param>
 109        /// <param name="cancellationToken">A <see cref="CancellationToken"/> for controlling the lifetime of the asynch
 110        /// <returns>A <see cref="Task{TResult}"/> that represents the asynchronous operation. The result
 111        /// of the task is a <see cref="List{T}" /> containing all elements of the source sequence.</returns>
 112        public static async Task<List<T>> ToListAsync<T>(this IPagedEnumerable<T> source, CancellationToken cancellation
 113        {
 6114            if (source == null)
 115            {
 1116                throw new ArgumentNullException("source");
 117            }
 118
 5119            List<T> results = new List<T>();
 120
 23121            await source.ForEachAsync(item => results.Add(item), cancellationToken).ConfigureAwait(continueOnCapturedCon
 122
 4123            return results;
 4124        }
 125    }
 126}