private async Task ExecuteCollectionOperation(Func <CollectionRunner, string, CollectionOperationOptions, Action <IOperationProgress>, OperationCancelToken, Task <IOperationResult> > operation, DocumentsOperationContext docsContext, IDisposable returnContextToPool, Documents.Operations.Operations.OperationType operationType, HashSet <string> excludeIds) { var collectionName = GetStringQueryString("name"); var token = CreateTimeLimitedCollectionOperationToken(); var collectionRunner = new StudioCollectionRunner(Database, docsContext, excludeIds); var operationId = Database.Operations.GetNextOperationId(); // use default options var options = new CollectionOperationOptions(); var task = Database.Operations.AddOperation(Database, collectionName, operationType, onProgress => operation(collectionRunner, collectionName, options, onProgress, token), operationId, token: token); _ = task.ContinueWith(_ => returnContextToPool.Dispose()); using (ContextPool.AllocateOperationContext(out JsonOperationContext context)) await using (var writer = new AsyncBlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteOperationIdAndNodeTag(context, operationId, ServerStore.NodeTag); } }
private void ExecuteCollectionOperation(Func <CollectionRunner, string, CollectionOperationOptions, Action <IOperationProgress>, OperationCancelToken, Task <IOperationResult> > operation, DocumentsOperationContext context, IDisposable returnContextToPool, Documents.Operations.Operations.OperationType operationType, HashSet <LazyStringValue> excludeIds) { var collectionName = GetStringQueryString("name"); var token = CreateTimeLimitedOperationToken(); var collectionRunner = new StudioCollectionRunner(Database, context, excludeIds); var operationId = Database.Operations.GetNextOperationId(); // use default options var options = new CollectionOperationOptions(); var task = Database.Operations.AddOperation(Database, collectionName, operationType, onProgress => operation(collectionRunner, collectionName, options, onProgress, token), operationId, token); task.ContinueWith(_ => returnContextToPool.Dispose()); using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteOperationId(context, operationId); } }