private bool StreamRequests(PartitionedBlockingCollection <TRequest> collection, CancellationToken serviceCancellationToken) { var consumerId = _consumerId.Increment(); using (var streamCancellationTokenSource = new CancellationTokenSource()) using (var serviceAndStreamCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(serviceCancellationToken, streamCancellationTokenSource.Token)) { if (!GetRequestStreamWithRetry(consumerId, serviceAndStreamCancellationTokenSource.Token, out var requestStream, out var responseStream)) { LogMessage(LogLevel.Debug, consumerId, "Unable to obtain Stream, exiting consumer"); streamCancellationTokenSource.Cancel(); return(false); } _hasAnyStreamStarted = true; _responseStreamsDic[consumerId] = new ResponseStreamWrapper <TResponse>(consumerId, responseStream, serviceAndStreamCancellationTokenSource.Token); while (!serviceCancellationToken.IsCancellationRequested && _grpcWrapper.IsConnected) { if (!DequeueItems(collection, BatchSizeConfigValue, serviceCancellationToken, out var items)) { return(false); } if (items == null || items.Count == 0) { LogMessage(LogLevel.Debug, consumerId, $"Expected a {_modelType} from the collection, but it was null"); continue; } var trySendStatus = TrySend(consumerId, requestStream, items, serviceCancellationToken); if (trySendStatus != TrySendStatus.Success) { ProcessFailedItems(items, collection); _grpcWrapper.TryCloseRequestStream(requestStream); streamCancellationTokenSource.Cancel(); return(trySendStatus == TrySendStatus.ErrorWithImmediateRetry); } IsStreaming = true; } streamCancellationTokenSource.Cancel(); } return(false); }
private void ProcessEvent_GCStart(EventWrittenEventArgs eventArgs) { //Identify if the GC was induced by code const uint reasonID_Induced = 0x1; const uint reasonID_InducedNotBlocking = 0x7; var reason = (uint)eventArgs.Payload[2]; if (reason == reasonID_Induced || reason == reasonID_InducedNotBlocking) { _inducedCount?.Increment(); } //Update Collection Counters for each generation including and below the GC depth requested var depth = (uint)eventArgs.Payload[1]; for (var i = 0; i <= depth; i++) { _collectionCountPerGen?[i]?.Increment(); } }