private void ProcessStreamData(Stream networkStream) { using var enumerator = streamProcessor.GetCompressedWorkItems(networkStream).GetEnumerator(); while (!streamProcessor.CancelToken.IsCancellationRequested && enumerator.MoveNext()) { var compressedItems = enumerator.Current; taskManager.Run(() => ProcessCompressedWorkItem(compressedItems)); States_MarkQueued(compressedItems); } }
private void ProcessStreamData(Stream networkStream) { var count = 0; using var enumerator = streamProcessor.GetCompressedWorkItems(networkStream).GetEnumerator(); while (!streamProcessor.CancelToken.IsCancellationRequested && enumerator.MoveNext()) { var compressedItem = enumerator.Current; // could put inside the task to start the task sooner after we hit this. // doing it here will limit the # of tasks created and waiting, and the # of compressedItems active at once, // which can run away very quickly. taskManager.Run(() => { try { compressedWorkersLimit.Wait(streamProcessor.CancelToken.Token); try { ProcessCompressedWorkItem(compressedItem); } finally { compressedWorkersLimit.Release(); } } catch (OperationCanceledException) { Debug.WriteLine("Cancelling..."); // NOP } }); Stats_MarkQueued(compressedItem); count++; if (maxNumCompressedItemsToProcess != -1 && count >= maxNumCompressedItemsToProcess) { return; } } Trace.WriteLine($"Processed {count} compressed work items."); }