async Task DequeueLoop(string partitionId, ControlQueue controlQueue, CancellationToken cancellationToken) { this.settings.Logger.PartitionManagerInfo( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Started listening for messages on queue {controlQueue.Name}."); while (!controlQueue.IsReleased) { try { // Every dequeue operation has a common trace ID so that batches of dequeued messages can be correlated together. // Both the dequeue traces and the processing traces will share the same "related" trace activity ID. Guid traceActivityId = AzureStorageOrchestrationService.StartNewLogicalTraceScope(useExisting: false); // This will block until either new messages arrive or the queue is released. IReadOnlyList <MessageData> messages = await controlQueue.GetMessagesAsync(cancellationToken); if (messages.Count > 0) { // De-dupe any execution started messages IEnumerable <MessageData> filteredMessages = await this.DedupeExecutionStartedMessagesAsync( controlQueue, messages, traceActivityId, cancellationToken); this.AddMessageToPendingOrchestration(controlQueue, filteredMessages, traceActivityId, cancellationToken); } } catch (OperationCanceledException) when(cancellationToken.IsCancellationRequested) { // shutting down break; } catch (Exception e) { this.settings.Logger.PartitionManagerWarning( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Exception in the dequeue loop for control queue {controlQueue.Name}. Exception: {e}"); Thread.Sleep(TimeSpan.FromSeconds(1)); } } this.settings.Logger.PartitionManagerInfo( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Stopped listening for messages on queue {controlQueue.Name}."); }
async Task DequeueLoop(string partitionId, ControlQueue controlQueue, CancellationToken cancellationToken) { this.settings.Logger.PartitionManagerInfo( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Started listening for messages on queue {controlQueue.Name}."); try { while (!controlQueue.IsReleased) { // Every dequeue operation has a common trace ID so that batches of dequeued messages can be correlated together. // Both the dequeue traces and the processing traces will share the same "related" trace activity ID. Guid traceActivityId = AzureStorageOrchestrationService.StartNewLogicalTraceScope(useExisting: false); // This will block until either new messages arrive or the queue is released. IReadOnlyList <MessageData> messages = await controlQueue.GetMessagesAsync(cancellationToken); // De-dupe any execution started messages messages = this.FilterOutExecutionStartedForDedupeValidation(controlQueue, messages, traceActivityId, cancellationToken); if (messages.Count > 0) { this.AddMessageToPendingOrchestration(controlQueue, messages, traceActivityId, cancellationToken); } } } finally { this.settings.Logger.PartitionManagerInfo( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Stopped listening for messages on queue {controlQueue.Name}."); } }
async void DequeueLoop(string partitionId, ControlQueue controlQueue, CancellationToken cancellationToken) { AnalyticsEventSource.Log.PartitionManagerInfo( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Started listening for messages on queue {controlQueue.Name}.", Utils.ExtensionVersion); try { while (!controlQueue.IsReleased) { // Every dequeue operation has a common trace ID so that batches of dequeued messages can be correlated together. // Both the dequeue traces and the processing traces will share the same "related" trace activity ID. Guid traceActivityId = AzureStorageOrchestrationService.StartNewLogicalTraceScope(); // This will block until either new messages arrive or the queue is released. IReadOnlyList <MessageData> messages = await controlQueue.GetMessagesAsync(cancellationToken); if (messages.Count > 0) { this.AddMessageToPendingOrchestration(controlQueue, messages, traceActivityId, cancellationToken); } } } finally { AnalyticsEventSource.Log.PartitionManagerInfo( this.storageAccountName, this.settings.TaskHubName, this.settings.WorkerId, partitionId, $"Stopped listening for messages on queue {controlQueue.Name}.", Utils.ExtensionVersion); } }