Beispiel #1
0
 public virtual Task ExecuteAsync(Func <Task> operation, CancellationToken cancellationToken)
 {
     if (!RetriesOnFailure)
     {
         return(operation());
     }
     return(_azureExecutionStrategy.ExecuteAsync(operation, cancellationToken));
 }
Beispiel #2
0
        private async Task <ObjectResult <T> > GetResultsAsync(
            MergeOption?forMergeOption, IDbExecutionStrategy executionStrategy, CancellationToken cancellationToken)
        {
            var mergeOption = forMergeOption.HasValue
                                  ? forMergeOption.Value
                                  : QueryState.EffectiveMergeOption;

            if (mergeOption != MergeOption.NoTracking)
            {
                QueryState.ObjectContext.AsyncMonitor.Enter();
            }

            try
            {
                return(await executionStrategy.ExecuteAsync(
                           () => QueryState.ObjectContext.ExecuteInTransactionAsync(
                               () => QueryState.GetExecutionPlan(forMergeOption)
                               .ExecuteAsync <T>(QueryState.ObjectContext, QueryState.Parameters, cancellationToken),
                               executionStrategy,
                               /*startLocalTransaction:*/ false, /*releaseConnectionOnSuccess:*/ !QueryState.EffectiveStreamingBehavior,
                               cancellationToken),
                           cancellationToken).WithCurrentCulture());
            }
            finally
            {
                if (mergeOption != MergeOption.NoTracking)
                {
                    QueryState.ObjectContext.AsyncMonitor.Exit();
                }
            }
        }
        private async Task <ObjectResult <T> > GetResultsAsync(
            MergeOption?forMergeOption,
            IDbExecutionStrategy executionStrategy,
            CancellationToken cancellationToken)
        {
            MergeOption mergeOption = forMergeOption.HasValue ? forMergeOption.Value : this.QueryState.EffectiveMergeOption;

            if (mergeOption != MergeOption.NoTracking)
            {
                this.QueryState.ObjectContext.AsyncMonitor.Enter();
            }
            ObjectResult <T> objectResult;

            try
            {
                // ISSUE: reference to a compiler-generated field
                // ISSUE: reference to a compiler-generated field
                // ISSUE: reference to a compiler-generated field
                // ISSUE: reference to a compiler-generated field
                // ISSUE: reference to a compiler-generated field
                objectResult = await executionStrategy.ExecuteAsync <ObjectResult <T> >((Func <Task <ObjectResult <T> > >)(() => this.\u003C\u003E4__this.QueryState.ObjectContext.ExecuteInTransactionAsync <ObjectResult <T> >((Func <Task <ObjectResult <T> > >)(() => this.\u003C\u003E4__this.QueryState.GetExecutionPlan(forMergeOption).ExecuteAsync <T>(this.\u003C\u003E4__this.QueryState.ObjectContext, this.\u003C\u003E4__this.QueryState.Parameters, cancellationToken)), executionStrategy, false, !this.\u003C\u003E4__this.QueryState.EffectiveStreamingBehavior, cancellationToken)), cancellationToken).WithCurrentCulture <ObjectResult <T> >();
            }
            finally
            {
                if (mergeOption != MergeOption.NoTracking)
                {
                    this.QueryState.ObjectContext.AsyncMonitor.Exit();
                }
            }
            return(objectResult);
        }
        protected virtual async Task ExecuteOnExecutionStrategyAsync(Func <Task> operation, CancellationToken?cancellationToken)
        {
            IDbExecutionStrategy strategy = ContextDbConfiguration.ExecutionStrategy;

            SuspendExecutionStrategy();

            await strategy.ExecuteAsync(operation, cancellationToken ?? new CancellationToken());

            ResumeExecutionStrategy();
        }
        protected virtual async Task <TResult> ExecuteOnExecutionStrategyAsync <TResult>(Func <Task <TResult> > operation, CancellationToken?cancellationToken)
        {
            IDbExecutionStrategy strategy = ContextDbConfiguration.ExecutionStrategy;

            SuspendExecutionStrategy();

            var result = await strategy.ExecuteAsync(operation, cancellationToken ?? new CancellationToken());

            ResumeExecutionStrategy();

            return(result);
        }