Пример #1
0
        private void PerformAsyncUow(IInvocation invocation, bool isTransactional)
        {
            var uow = _unitOfWorkManager.StartNew(isTransactional);

            invocation.Proceed();

            Task result;

            if (invocation.Method.ReturnType == typeof(Task))
            {
                result = AsyncHelper.ReturnTaskAfterAction(
                    (Task)invocation.ReturnValue,
                    async() =>
                {
                    await uow.CompleteAsync();
                    uow.Dispose();
                }
                    );
            }
            else
            {
                result = (Task)AsyncHelper.CallReturnAfterAction(
                    invocation.Method.ReturnType.GenericTypeArguments[0],
                    invocation.ReturnValue,
                    async() =>
                {
                    await uow.CompleteAsync();
                    uow.Dispose();
                    _iocResolver.Release(uow);
                }
                    );
            }

            invocation.ReturnValue = result;
        }