public TResult Invoke <TResult>(AspectActivatorContext activatorContext)
        {
            var context = _aspectContextFactory.CreateContext(activatorContext);

            try
            {
                var aspectBuilder = _aspectBuilderFactory.Create(context);
                var task          = aspectBuilder.Build()(context);
                if (task.IsFaulted)
                {
                    throw _aspectExceptionWrapper.Wrap(context, task.Exception.InnerException);
                }
                if (!task.IsCompleted)
                {
                    // try to avoid potential deadlocks.
                    NoSyncContextScope.Run(task);
                    // task.GetAwaiter().GetResult();
                }

                return((TResult)context.ReturnValue);
            }
            catch (Exception ex)
            {
                throw _aspectExceptionWrapper.Wrap(context, ex);
            }
            finally
            {
                _aspectContextFactory.ReleaseContext(context);
            }
        }
Example #2
0
        public TResult Invoke <TResult>(AspectActivatorContext activatorContext)
        {
            var context = aspectContextFactory.CreateContext(activatorContext);

            try
            {
                var aspectBuilder = aspectBuilderFactory.Create(context);
                var task          = aspectBuilder.Build()(context);
                if (task.IsFaulted)
                {
                    throw task.Exception.InnerException;
                }

                if (!task.IsCompleted)
                {
                    // try to avoid potential deadlocks.
                    NoSyncContextScope.Run(task);
                }
                return((TResult)context.ReturnValue);
            }
            finally
            {
                aspectContextFactory.ReleaseContext(context);
            }
        }
        public TResult Invoke <TResult>(InterceptorDelegate interceptor, InvocationContext context)
        {
            Task task = null;

            if (_collections.TryGetValue(context.Method, out InterceptorMiddleware middleware))
            {
                task = middleware(interceptor)(context);
            }
            else
            {
                task = interceptor(context);
            }
            if (task.IsFaulted)
            {
                throw task.Exception.InnerException;
            }
            if (!task.IsCompleted)
            {
                NoSyncContextScope.Run(task);
            }
            return((TResult)context.Return);
        }
Example #4
0
 public static T RunWithoutSyncContext <T>(this ValueTask <T> task)
 {
     return(NoSyncContextScope.Run(task));
 }
Example #5
0
 public static void RunWithoutSyncContext(this ValueTask task)
 {
     NoSyncContextScope.Run(task);
 }