|
|
@ -160,20 +160,25 @@ 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)) |
|
|
|
|
|
{ |
|
|
|
|
|
using (var selfToken = new CancellationTokenSource()) |
|
|
|
|
|
{ |
|
|
|
|
|
using (var combined = CancellationTokenSource.CreateLinkedTokenSource(selfToken.Token, cancellationToken)) |
|
|
{ |
|
|
{ |
|
|
var actionBlock = |
|
|
var actionBlock = |
|
|
new ActionBlock<TDocument>(processor, |
|
|
new ActionBlock<TDocument>(async x => |
|
|
|
|
|
{ |
|
|
|
|
|
if (!combined.IsCancellationRequested) |
|
|
|
|
|
{ |
|
|
|
|
|
await processor(x); |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
new ExecutionDataflowBlockOptions |
|
|
new ExecutionDataflowBlockOptions |
|
|
{ |
|
|
{ |
|
|
MaxDegreeOfParallelism = 1, |
|
|
MaxDegreeOfParallelism = 1, |
|
|
MaxMessagesPerTask = 1, |
|
|
MaxMessagesPerTask = 1, |
|
|
BoundedCapacity = 100 |
|
|
BoundedCapacity = 100 |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
using (var selfToken = new CancellationTokenSource()) |
|
|
|
|
|
{ |
|
|
|
|
|
using (var combined = CancellationTokenSource.CreateLinkedTokenSource(selfToken.Token, cancellationToken)) |
|
|
|
|
|
{ |
|
|
|
|
|
try |
|
|
try |
|
|
{ |
|
|
{ |
|
|
await source.ForEachAsync(async i => |
|
|
await source.ForEachAsync(async i => |
|
|
|