private async Task ProcessChangeAsync()

in Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo/Trigger/CosmosDBMongoTriggerListener.cs [174:210]


        private async Task ProcessChangeAsync(ChangeStreamDocument<BsonDocument> change)
        {
            try
            {
                lock (_metricsLock)
                {
                    _currentMetrics.PendingEventsCount++;
                    CosmosDBMongoMetricsStore.AddMetrics(_reference.functionId, _reference.databaseName, _reference.collectionName, _currentMetrics);
                }

                try
                {
                    var triggerData = new TriggeredFunctionData
                    {
                        TriggerValue = change
                    };
                    var result = await this._executor.TryExecuteAsync(triggerData, this._cancellationTokenSource.Token);
                    if (!result.Succeeded)
                    {
                        _logger.LogWarning($"Function execution failed for document {change.DocumentKey}: {result.Exception}");
                    }
                }
                finally
                {
                    lock (_metricsLock)
                    {
                        _currentMetrics.PendingEventsCount--;
                        CosmosDBMongoMetricsStore.AddMetrics(_reference.functionId, _reference.databaseName, _reference.collectionName, _currentMetrics);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(Events.OnError, $"Error processing change. Exception: {ex.Message}");
                throw;
            }
        }