private void ProcessChunk() { try { foreach (var jobBatchItem in jobQueue.GetConsumingEnumerable()) { if (cancellationToken.IsCancellationRequested) { break; } var processed = new ProcessedBatchItem { JobBatchItemId = jobBatchItem.JobBatchItemId, Processed = byteProcessor.Process(jobBatchItem.Memory) }; jobBatchItem.ReleaseBuffer(); if (!cancellationToken.IsCancellationRequested) { outputBuffer.SubmitProcessedBatchItem(processed); } } } catch (Exception e) { jobContext.Failure(e, e.Message); cancellationTokenSource.Cancel(); } finally { countdown.Signal(); } outputBuffer.SubmitCompleted(); }
public void SubmitProcessedBatchItem(ProcessedBatchItem processedBatchItem) => processedJobQueue.Add(processedBatchItem);