Browse Source

Batch support.

pull/617/head
Sebastian 5 years ago
parent
commit
92245d5c42
  1. 4
      backend/src/Squidex.Domain.Apps.Entities/History/NotifoService.cs
  2. 32
      backend/src/Squidex.Infrastructure/CollectionExtensions.cs

4
backend/src/Squidex.Domain.Apps.Entities/History/NotifoService.cs

@ -131,11 +131,11 @@ namespace Squidex.Domain.Apps.Entities.History
.Where(x => IsComment(x.AppEvent.Payload) || x.HistoryEvent != null)
.ToList();
if (publishedEvents.Any())
foreach (var batch in publishedEvents.Batch(50))
{
var requests = new List<PublishDto>();
foreach (var @event in publishedEvents)
foreach (var @event in batch)
{
var payload = @event.AppEvent.Payload;

32
backend/src/Squidex.Infrastructure/CollectionExtensions.cs

@ -16,6 +16,38 @@ namespace Squidex.Infrastructure
{
public static class CollectionExtensions
{
public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(this IEnumerable<TSource> source, int size)
{
TSource[]? bucket = null;
var bucketIndex = 0;
foreach (var item in source)
{
if (bucket == null)
{
bucket = new TSource[size];
}
bucket[bucketIndex++] = item;
if (bucketIndex != size)
{
continue;
}
yield return bucket;
bucket = null;
bucketIndex = 0;
}
if (bucket != null && bucketIndex > 0)
{
yield return bucket.Take(bucketIndex);
}
}
public static async Task<List<T>> ToListAsync<T>(this IAsyncEnumerable<T> source)
{
var result = new List<T>();

Loading…
Cancel
Save