private void ExecuteQueryOperation(Func <QueryRunner, string, IndexQueryServerSide, QueryOperationOptions, Action <IOperationProgress>, OperationCancelToken, Task <IOperationResult> > operation, DocumentsOperationContext context, IDisposable returnContextToPool, DatabaseOperations.PendingOperationType operationType) { var indexName = RouteMatch.Url.Substring(RouteMatch.MatchLength); var query = IndexQueryServerSide.Create(HttpContext, GetStart(), GetPageSize(int.MaxValue), context); var options = GetQueryOperationOptions(); var token = CreateTimeLimitedOperationToken(); var queryRunner = new QueryRunner(Database, context); var operationId = Database.Operations.GetNextOperationId(); var task = Database.Operations.AddOperation(indexName, operationType, onProgress => operation(queryRunner, indexName, query, options, onProgress, token), operationId, token); task.ContinueWith(_ => returnContextToPool.Dispose()); using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteOperationId(context, operationId); } }
private void ExecuteCollectionOperation(Func <CollectionRunner, string, CollectionOperationOptions, Action <IOperationProgress>, OperationCancelToken, Task <IOperationResult> > operation, DocumentsOperationContext context, IDisposable returnContextToPool, DatabaseOperations.PendingOperationType operationType) { var collectionName = GetStringQueryString("name"); var token = CreateTimeLimitedOperationToken(); var collectionRunner = new CollectionRunner(Database, context); var operationId = Database.Operations.GetNextOperationId(); var options = GetCollectionOperationOptions(); var task = Database.Operations.AddOperation(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); } }