Browse Source

Improved the stability of this task.

pull/325/head
Sebastian 8 years ago
parent
commit
c7ba279df7
  1. 23
      src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs
  2. 1
      tests/Squidex.Infrastructure.Tests/MongoDb/MongoExtensionsTests.cs

23
src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs

@ -161,19 +161,24 @@ namespace Squidex.Infrastructure.MongoDb
public static async Task ForEachPipelineAsync<TDocument>(this IAsyncCursor<TDocument> source, Func<TDocument, Task> processor, CancellationToken cancellationToken = default(CancellationToken))
{
var actionBlock =
new ActionBlock<TDocument>(processor,
new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = 1,
MaxMessagesPerTask = 1,
BoundedCapacity = 100
});
using (var selfToken = new CancellationTokenSource())
{
using (var combined = CancellationTokenSource.CreateLinkedTokenSource(selfToken.Token, cancellationToken))
{
var actionBlock =
new ActionBlock<TDocument>(async x =>
{
if (!combined.IsCancellationRequested)
{
await processor(x);
}
},
new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = 1,
MaxMessagesPerTask = 1,
BoundedCapacity = 100
});
try
{
await source.ForEachAsync(async i =>

1
tests/Squidex.Infrastructure.Tests/MongoDb/MongoExtensionsTests.cs

@ -151,6 +151,7 @@ namespace Squidex.Infrastructure.MongoDb
}
result.Add(x);
return TaskHelper.Done;
}, cts.Token);
});

Loading…
Cancel
Save