コード例 #1
0
        private async void NumberReceivedEventHandler(object?sender, NumberGeneratedEventArgs e)
        {
            _logger.LogInformation($"Number received: {e.Number}");
            var isPersisted = false;

            while (!isPersisted)
            {
                try
                {
                    _logger.LogInformation($"Trying to persist number: {e.Number}");
                    using (var scope = _scopeFactory.CreateScope())
                    {
                        var numberProcessor = scope.ServiceProvider.GetRequiredService <INumberProcessor>();
                        await numberProcessor.PersistAsync(e.Number);
                    }

                    isPersisted = true;
                }
                catch (Exception ex)
                {
                    _logger.LogInformation($"Could not persist this number: {e.Number}, will try again later. Details: {ex}");
                    await Task.Delay(1000);
                }
            }
        }
コード例 #2
0
        private async void OnNumberGenerated(object sender, NumberGeneratedEventArgs e)
        {
            try
            {
                _logger.LogDebug($"{nameof(OnNumberGenerated)}: {e.Number}");
                var repo = new RandomNumber(e.Number);

                _repository.Add(repo);
                if (await _repository.SaveChangesAsync())
                {
                    _logger.LogDebug($"{nameof(OnNumberGenerated)}: {e.Number} saved to DB");
                }
                else
                {
                    _logger.LogWarning($"Failed to save to DB {nameof(OnNumberGenerated)}");
                }

                if (e.Number > 800)
                {
                    CancellationToken cts = new CancellationTokenSource().Token;

                    //post to endpoint
                    var dto = new NumberDto
                    {
                        Id        = repo.RandomNumberId,
                        Number    = repo.Number,
                        CreatedAt = repo.CreatedAt
                    };
                    var json = JsonConvert.SerializeObject(dto);
                    var data = new StringContent(json, Encoding.UTF8, "application/json");

                    var response = await _clientLocal.PostAsync("api/numbers", data, cts).ConfigureAwait(false);

                    if (response.IsSuccessStatusCode)
                    {
                        //may be log
                    }
                    else
                    {
                        _logger.LogDebug($"StatusCode {response.StatusCode.ToString()} during posting message {dto.ToString()}");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error in {nameof(OnNumberGenerated)}");
            }
        }
コード例 #3
0
        private void NumberGenerator_NumberGenerated(object sender, NumberGeneratedEventArgs e)
        {
            Log.Info($"Number generated: {e.Number} ");

            lock (_lockObject)
            {
                var randonNumber = new RandomNumber
                {
                    Value         = e.Number,
                    GeneratedTime = DateTime.UtcNow
                };

                randonNumber.ServiceCallRetryRequired = !CallServiceForLargeNumberNotification(randonNumber).Result;

                //instead of saving everything in one batch I am saving per item in case an error interrupts the process and we have a record of what was already generated
                using (var numberRepository = new RandomNumberRepository())
                {
                    numberRepository.AddRandomNumber(randonNumber);
                    numberRepository.Save();
                }
            }
        }
コード例 #4
0
        void generator_NumberGenerated(object sender, NumberGeneratedEventArgs e)
        {
            var number = new Number(e.Execution, e.BatchSequence, e.Number);

            Assert.True(number.Value > 0);
        }
コード例 #5
0
 private static void NumberGenerator_NumberGenerated(object sender, NumberGeneratedEventArgs e)
 {
     Console.WriteLine($"Number generated {e.Number}");
 }