/// <summary> /// Proccess the task asynchronously. /// </summary> /// <typeparam name="TValue">The type of the value.</typeparam> /// <typeparam name="TContext">The type of the context.</typeparam> /// <param name="repository">The repository.</param> /// <param name="list">The list.</param> /// <param name="chunkSize">Size of the chunk.</param> /// <param name="task">The task.</param> /// <param name="className">Name of the class.</param> /// <param name="token">The token.</param> internal static async Task ProccessTaskAsync <TValue, TContext>( IBaseRepositoryAsync <TValue, TContext> repository, IEnumerable <TValue> list, int chunkSize, Func <IEnumerable <TValue>, CancellationToken, Task> task, string className, CancellationToken token) where TValue : class where TContext : DbContext { ThrowErrorIf.IsNullValue(repository, nameof(repository), className); ThrowErrorIf.IsNullOrEmptyList(list, nameof(list), className); ThrowErrorIf.IsLessThanOrEqualsZero(chunkSize); await repository.MultiTransactionsAsync( async ctx => { var listSplit = list.SplitList(chunkSize); foreach (var split in listSplit) { await task(split, token). ConfigureAwait(false); } }, token).ConfigureAwait(false); }
public virtual async Task UpdateAsync(IEnumerable <TValue> entityList, CancellationToken token) { ThrowErrorIf. IsNullOrEmptyList(entityList, nameof(entityList), nameof(UpdateAsync)); Context.UpdateRange(entityList); await SaveChangesAsync(token). ConfigureAwait(false); }
/// <summary> /// Splits the list. /// </summary> /// <typeparam name="TValue">The type of the value.</typeparam> /// <param name="list">The list.</param> /// <param name="size">The size.</param> /// <returns></returns> public static IEnumerable <IEnumerable <TValue> > SplitList <TValue>(this IEnumerable <TValue> list, int size) { ThrowErrorIf. IsNullOrEmptyList(list, nameof(list), nameof(SplitList)); ThrowErrorIf. IsLessThanOrEqualsZero(size); var listSplited = list.Select((x, i) => new { Index = i, Value = x }) .GroupBy(x => x.Index / size) .Select(x => x.Select(v => v.Value)); return(listSplited); }
public void ThrowErrorIf_IsNullOrEmptyList() => Assert.Throws <ListNullOrEmptyException>(() => ThrowErrorIf.IsNullOrEmptyList(new List <string>(), string.Empty, string.Empty));