public async Task <AsyncFuncExecutionResult <T> > TryExecuteAsync <T>(Func <Task <T> > code)
        {
            AsyncFuncExecutionResult <T> result;

            try
            {
                var codeResult = await code.Invoke();

                result = AsyncFuncExecutionResult <T> .SuccessResult(executedBy : this, executedCode : code, value : codeResult);
            }
            catch (Exception ex)
            {
                this.HandleException(ex);
                result = AsyncFuncExecutionResult <T> .FailedResult(executedBy : this, executedCode : code, exception : ex);
            }

            this.OnResult(result);
            return(result);
        }
 protected virtual void OnResult <T>(AsyncFuncExecutionResult <T> result)
 {
 }