public void CallBatch(IBatchDataProvider <TInputElement, TOutputElement, TContext> prov, TElement[] currentElements, out TElement[] elementsToUpdate) { var elementsToUpdateList = new List <TElement>(); try { // Exceptions here will cause going to next data provider var currentOutput = prov.GetBatch(currentElements.Select(elm => elm.Input).ToArray(), Context); if (currentOutput.Length != currentElements.Length) { throw new Exception(string.Format("Output count mismatch when calling <{0}>, expected=<{1}, found=<{2}>>", prov.GetType().Name, currentElements.Length, currentOutput.Length)); } // Smooth code, no exceptions expected for (int i = 0; i < currentElements.Length; i++) { var elm = currentElements[i]; elm.Output = currentOutput[i]; if (IsElementUpdatable(elm)) { elementsToUpdateList.Add(elm); } } } catch (Exception ex) { Local.Admin.LogException(ex); } elementsToUpdate = elementsToUpdateList.ToArray(); }
public BatchService(IBatchDataProvider batchDataProvider, IBeerDataProvider beerDataProvider) { BatchDataProvider = batchDataProvider; BeerDataProvider = beerDataProvider; }