AppfailReporting.Reporting.FailQueue.Enqueue C# (CSharp) Method

Enqueue() public static method

public static Enqueue ( FailOccurrenceDto failReport ) : void
failReport AppfailReporting.Model.FailOccurrenceDto
return void
        public static void Enqueue(FailOccurrenceDto failReport)
        {
            // When recording a new fail report, make sure that the reporting worker is running
            ReportingWorker.Instance.Start();

            try
            {
                _queueLock.EnterWriteLock();
                _failQueue.Enqueue(failReport);
                
                // Signal that the queue is at least at the minimum batch size
                if (_failQueue.Count >= ConfigurationModel.Instance.ReportingMinimumBatchSize)
                {
                    _queueSignal.Set();
                }
            }
            finally
            {
                _queueLock.ExitWriteLock();
            }
        }

Usage Example

Example #1
0
        public override WaitHandle DoWork()
        {
            var failOccurrences = FailQueue.Dequeue(ConfigurationModel.Instance.ReportingMinimumBatchSize);

            if (failOccurrences.Count() > 0)
            {
                var failSubmission = new FailSubmissionDto(ConfigurationModel.Instance.ApiToken, failOccurrences);

                if (!PostToService(failSubmission))
                {
                    // Submission fails, so add these back to the reporting queue
                    foreach (var occurrence in failOccurrences)
                    {
                        occurrence.IncrementSubmissionAttempts();

                        if (occurrence.SubmissionAttempts < ConfigurationModel.Instance.ReportingSubmissionAttempts)
                        {
                            FailQueue.Enqueue(occurrence);
                        }
                    }
                }
            }

            // Return the wait handle that will signal to
            // call this worker method when the queue is not empty.
            return(FailQueue.WaitHandle);
        }