コード例 #1
0
        private async Task <IExecutionResult> ExecuteMutationAsync(
            IExecutionContext executionContext,
            CancellationToken cancellationToken)
        {
            BatchOperationHandler batchOperationHandler =
                CreateBatchOperationHandler(executionContext);

            try
            {
                IReadOnlyList <ResolverTask> rootResolverTasks =
                    CreateRootResolverTasks(
                        executionContext,
                        executionContext.Result.Data);

                await ExecuteResolverBatchSeriallyAsync(
                    executionContext,
                    rootResolverTasks,
                    batchOperationHandler,
                    cancellationToken)
                .ConfigureAwait(false);

                EnsureRootValueNonNullState(
                    executionContext.Result,
                    rootResolverTasks);

                return(executionContext.Result);
            }
            finally
            {
                batchOperationHandler?.Dispose();
            }
        }
コード例 #2
0
        private async Task <IReadOnlyQueryResult> ExecuteSubscriptionQueryAsync(
            IExecutionContext executionContext,
            CancellationToken cancellationToken)
        {
            BatchOperationHandler batchOperationHandler =
                CreateBatchOperationHandler(executionContext);
            var requestTimeoutCts = new CancellationTokenSource(
                _options.ExecutionTimeout);

            try
            {
                using (var combinedCts = CancellationTokenSource
                                         .CreateLinkedTokenSource(
                           requestTimeoutCts.Token,
                           cancellationToken))
                {
                    IQueryResult result = await ExecuteQueryAsync(
                        executionContext,
                        batchOperationHandler,
                        cancellationToken)
                                          .ConfigureAwait(false);

                    return(result.AsReadOnly());
                }
            }
            finally
            {
                batchOperationHandler?.Dispose();
                requestTimeoutCts.Dispose();
            }
        }
コード例 #3
0
        private async Task <IExecutionResult> ExecuteMutationAsync(
            IExecutionContext executionContext,
            CancellationToken cancellationToken)
        {
            ResolverContext[] initialBatch =
                CreateInitialBatch(executionContext,
                                   executionContext.Result.Data);

            BatchOperationHandler batchOperationHandler =
                CreateBatchOperationHandler(executionContext);

            try
            {
                await ExecuteResolverBatchSeriallyAsync(
                    executionContext,
                    initialBatch,
                    batchOperationHandler,
                    cancellationToken)
                .ConfigureAwait(false);

                EnsureRootValueNonNullState(
                    executionContext.Result,
                    initialBatch);

                return(executionContext.Result);
            }
            finally
            {
                batchOperationHandler?.Dispose();
                ResolverContext.Return(initialBatch);
                ArrayPool <ResolverContext> .Shared.Return(initialBatch);
            }
        }
コード例 #4
0
        private static async Task <IExecutionResult> ExecuteInternalAsync(
            IExecutionContext executionContext,
            CancellationToken cancellationToken)
        {
            BatchOperationHandler batchOperationHandler =
                CreateBatchOperationHandler(executionContext);

            try
            {
                return(await ExecuteQueryAsync(
                           executionContext,
                           batchOperationHandler,
                           cancellationToken)
                       .ConfigureAwait(false));
            }
            finally
            {
                batchOperationHandler?.Dispose();
            }
        }