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)); } }
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); }