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)) 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 selfToken = new CancellationTokenSource())
{ {
using (var combined = CancellationTokenSource.CreateLinkedTokenSource(selfToken.Token, cancellationToken)) 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 try
{ {
await source.ForEachAsync(async i => await source.ForEachAsync(async i =>

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

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

Loading…
Cancel
Save