@Override
    public void processAsync(IncomingMessageEnvelope envelope, MessageCollector collector, TaskCoordinator coordinator, TaskCallback callback) {
      processedMessageLatch.countDown();
      // Implementation does not invokes callback.complete to block the RunLoop.process() after it exhausts the
      // `task.max.concurrency` defined per task. Call callback.complete() in the processCallback if needed.
      processCallback.ifPresent(pcb -> pcb.onMessage(envelope, callback));
    }
A test TaskApplication to use in test harnesses.
@param systemName test input/output system
@param inputTopic topic to consume
@param outputTopic topic to output
@param processedMessageLatch latch that counts down per message processed
@param shutdownLatch latch that counts down once during shutdown
@param processCallback optional callback called per message processed.
samza-test/src/test/java/org/apache/samza/test/processor/TestTaskApplication.java