public ScenarioStepReturnBase MethodInvoke <TScenario>( TScenario scenario, MethodInfo methodInfo, TimeSpan timeout, params object[] parameters) { ScenarioStepReturnBase result = null; try { var task = Invoke <TScenario>(scenario, methodInfo, parameters); if (timeout != TimeSpan.Zero && task.Wait(timeout: timeout) == false) { try { task.Dispose(); } catch (Exception) { throw new AScenarioStepTimeoutException(); } } result = task.Result; } catch (Exception exception) { throw exception.InnerException ?? exception; } return(result); }
private async Task <ScenarioStepReturnResultBundle> RunScenarioStep <TScenario>( TScenario scenario, MethodInfo method, TimeSpan timeout, object[] previousParameters, ABusinessStepScenarioAttribute businessStepScenario) { ScenarioStepReturnBase scenarioStepResult = null; try { _logger.Information(string.Format("[{0}] Step was started.", businessStepScenario.Description)); //await Task.Yield(); await Task.Run(() => { scenarioStepResult = _methodInvoker.MethodInvoke(scenario, method, timeout, previousParameters); }); } catch (AScenarioStepTimeoutException timeoutException) { _logger.Error(string.Format("[{0}] Step was finished usuccessfully due to timeout.", businessStepScenario.Description)); { var scenarioResult = new ScenarioResult(isSuccessful: false, numberScenarioStepInvoked: 1, exceptions: timeoutException); return(new ScenarioStepReturnResultBundle(new ScenarioStepReturnVoid(), scenarioResult)); } } catch (Exception exception) { _logger.Error(string.Format("[{0}] Step was finished usuccessfully due to the following exception [{1}].", businessStepScenario.Description, exception)); { var scenarioResult = new ScenarioResult(isSuccessful: false, numberScenarioStepInvoked: 1, exceptions: exception); return(new ScenarioStepReturnResultBundle(new ScenarioStepReturnVoid(), scenarioResult)); } } _logger.Information(string.Format("[{0}] Step was finished successfully.", businessStepScenario.Description)); return(new ScenarioStepReturnResultBundle(scenarioStepResult, new EmptyScenarioResult(numberScenarioStepInvoked: 1))); }
private async Task <ScenarioStepReturnBase> Invoke <TScenario>( TScenario scenario, MethodInfo method, params object[] parameters) { ScenarioStepReturnBase methodResult = null; var task = Task.Run(() => { try { methodResult = method.Invoke(scenario, parameters: parameters) as ScenarioStepReturnBase; } catch (Exception exception) { throw exception.InnerException; } }); await task; return(methodResult ?? new ScenarioStepReturnVoid()); }
//-------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------- public ScenarioStepReturnResultBundle(ScenarioStepReturnBase scenarioSStepReturn, ScenarioResult scenarioResult) { _scenarioSStepReturn = scenarioSStepReturn; _scenarioResult = scenarioResult; }