private static async Task <IEnumerable <T> > ToEnumerableAsync <T>([NotNull] Task <T> item) where T : class { var result = await item.ConfigureAwait(false); return(result == null ? null : MaterializationPolicyExtensions.ToEnumerable(result)); }
/// <summary> /// Creates an <see cref="IAsyncEnumerable{T}"/> from a generator. /// </summary> /// <param name="policy"> /// The policy. /// </param> /// <param name="generateItem"> /// The generate Item. /// </param> /// <param name="dispose"> /// Function to call when disposing the generator. /// </param> /// <typeparam name="T"> /// The type of the items. /// </typeparam> /// <typeparam name="TState"> /// The type of the enumerator state. /// </typeparam> /// <returns> /// The <see cref="IAsyncEnumerable{T}"/>. /// </returns> public static IAsyncEnumerable <T> CreateAsyncEnumerable <T, TState>(this IMaterializationPolicy policy, Func <TState, Task <T> > generateItem, [CanBeNull] Action <TState> dispose = null) where TState : new() where T : class => policy.CreateAsyncEnumerable(() => new GeneratorEnumerable <T, TState>(() => Task.FromResult(new TState()), context => MaterializationPolicyExtensions.ToEnumerableAsync(generateItem(context)), dispose));
/// <summary> /// Creates an <see cref="IAsyncEnumerable{T}"/> from a generator. /// </summary> /// <param name="policy"> /// The policy. /// </param> /// <param name="initialize"> /// Initializes the enumerable, and returns the context. /// </param> /// <param name="generateItem"> /// Returns an item or <c>null</c> when no more items are available. /// </param> /// <param name="dispose"> /// Function to call when disposing the generator. /// </param> /// <typeparam name="T"> /// The type of the items. /// </typeparam> /// <typeparam name="TState"> /// The type of the enumerator state. /// </typeparam> /// <returns> /// The <see cref="IAsyncEnumerable{T}"/>. /// </returns> public static IAsyncEnumerable <T> CreateAsyncEnumerable <T, TState>(this IMaterializationPolicy policy, Func <Task <TState> > initialize, Func <TState, Task <T> > generateItem, [CanBeNull] Action <TState> dispose = null) where T : class => policy.CreateAsyncEnumerable(initialize, context => MaterializationPolicyExtensions.ToEnumerableAsync(generateItem(context)), dispose);