//------------------------------------------------------------------------- /// <summary> /// Creates an instance wrapping the specified listener. </summary> /// <param name="listener"> the underlying listener wrapped by this object </param> /// <param name="tasksExpected"> the number of tasks to be executed </param> /// <param name="columns"> the columns for which values are being calculated </param> internal ListenerWrapper(CalculationListener listener, int tasksExpected, IList <CalculationTarget> targets, IList <Column> columns) { this.listener = ArgChecker.notNull(listener, "listener"); this.tasksExpected = ArgChecker.notNegative(tasksExpected, "tasksExpected"); listenerLock.@lock(); try { listener.calculationsStarted(targets, columns); if (tasksExpected == 0) { listener.calculationsComplete(); } } finally { listenerLock.unlock(); } }
internal UnwrappingListener(CalculationListener @delegate) { this.@delegate = @delegate; }
public void calculateAsync(CalculationTasks tasks, MarketData marketData, ReferenceData refData, CalculationListener listener) { // the listener is decorated to unwrap ScenarioArrays containing a single result ScenarioMarketData md = ScenarioMarketData.of(1, marketData); UnwrappingListener unwrappingListener = new UnwrappingListener(listener); calculateMultiScenarioAsync(tasks, md, refData, unwrappingListener); }
public void calculateMultiScenarioAsync(CalculationTasks tasks, ScenarioMarketData marketData, ReferenceData refData, CalculationListener listener) { IList <CalculationTask> taskList = tasks.Tasks; // the listener is invoked via this wrapper // the wrapper ensures thread-safety for the listener // it also calls the listener with single CalculationResult cells, not CalculationResults System.Action <CalculationResults> consumer = new ListenerWrapper(listener, taskList.Count, tasks.Targets, tasks.Columns); // run each task using the executor taskList.ForEach(task => runTask(task, marketData, refData, consumer)); }
public virtual void calculateMultiScenarioAsync <T1>(CalculationRules calculationRules, IList <T1> targets, IList <Column> columns, ScenarioMarketData marketData, ReferenceData refData, CalculationListener listener) where T1 : com.opengamma.strata.basics.CalculationTarget { CalculationTasks tasks = CalculationTasks.of(calculationRules, targets, columns, refData); taskRunner.calculateMultiScenarioAsync(tasks, marketData, refData, listener); }