示例#1
0
        public async Task <T> Trigger()
        {
            if (!Enabled)
            {
                Logger.Error(GetType(), "Not really running remote action because action is disabled");
                throw new Exception("trying to trigger disabled action");
            }

            Logger.Debug(GetType(), "Running remote action");
            ResultHolder <T> resultAsHolder;

            try {
                StartedExecution();
                var result = await _remoteAction();

                resultAsHolder = ResultHolder <T> .CreateSuccess(result);

                await ExecOnUiThread.Exec(() => ActionExecuted?.Invoke(resultAsHolder));

                return(result);
            } catch (Exception ex) {
                resultAsHolder = ResultHolder <T> .CreateFailure(ex.Message, ex);

                await ExecOnUiThread.Exec(() => ActionExecuted?.Invoke(resultAsHolder));

                throw;
            } finally {
                Logger.Debug(GetType(), "Remote action ended");
                EndedExecution();
            }
        }
 private static ResultHolder <ToT> RunConvertingExceptionToFailure <FromT, ToT>(Func <FromT, ToT> toInvoke, FromT arg)
 {
     try {
         return(ResultHolder <ToT> .CreateSuccess(toInvoke(arg)));
     } catch (Exception ex) {
         Logger.Debug(typeof(ValueViewExtensions), "RunConvertingExceptionToFailure got exception {0}", ex);
         return(ResultHolder <ToT> .CreateFailure(I18n.TranslateNoExtraction(ex.Message), ex));
     }
 }
示例#3
0
        public async Task <Unit> Trigger()
        {
            if (!Enabled)
            {
                Logger.Error(GetType(), "Not really running action because action is disabled");
                return(Unit.Instance);
            }

            Logger.Debug(GetType(), "Triggering local action?={0}", _localAction != null);

            if (_localAction != null)
            {
                try {
                    await _localAction.Invoke();
                } catch (Exception ex) {
                    ActionExecuted?.Invoke(ResultHolder <Unit> .CreateFailure(ex.Message, ex));
                    throw;
                }
            }

            ActionExecuted?.Invoke(ResultHolder <Unit> .CreateSuccess(Unit.Instance));

            return(Unit.Instance);
        }