private void CrossJoinData(TInput2 passingRow) { if (!WasInMemoryTableLoaded) { InMemoryTarget.Wait(); WasInMemoryTableLoaded = true; } foreach (TInput1 inMemoryRow in InMemoryData) { try { if (inMemoryRow != null && passingRow != null) { TOutput result = CrossJoinFunc.Invoke(inMemoryRow, passingRow); if (result != null) { Buffer.SendAsync(result).Wait(); LogProgress(); } } } catch (Exception e) { if (!ErrorHandler.HasErrorBuffer) { throw e; } ErrorHandler.Send(e, string.Concat(ErrorHandler.ConvertErrorData <TInput1>(inMemoryRow), " |--| ", ErrorHandler.ConvertErrorData <TInput2>(passingRow))); } } }
internal override void CompleteBufferOnPredecessorCompletion() { InMemoryTarget.CompleteBufferOnPredecessorCompletion(); PassingTarget.CompleteBufferOnPredecessorCompletion(); Task.WaitAll(InMemoryTarget.Completion, PassingTarget.Completion); Buffer.Complete(); }
internal override void FaultBufferOnPredecessorCompletion(Exception e) { InMemoryTarget.FaultBufferOnPredecessorCompletion(e); PassingTarget.FaultBufferOnPredecessorCompletion(e); ((IDataflowBlock)Buffer).Fault(e); }