示例#1
0
        private async Task RunInstance(int num, CancellationToken stoppingToken)
        {
            _logger.LogInformation($"Worker {num} запущен");

            while (!stoppingToken.IsCancellationRequested)
            {
                var jobItem = await _myQueue.DequeueAsync(stoppingToken);

                try
                {
                    _logger.LogInformation("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    _logger.LogInformation($"Задача #{num} взята в обработку. Размер очереди: {_myQueue.Size}");
                    // это делегат, который добавлен из контроллера
                    await jobItem(stoppingToken);

                    _logger.LogInformation("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    _logger.LogInformation($"Задача #{num} закончена. Размер очереди: {_myQueue.Size}");
                }

                catch (Exception e)
                {
                    _logger.LogError($"При работе с задачей {num} произошло исключение. Сообщение:");
                    _logger.LogError(e.Message);
                    if (e.InnerException != null)
                    {
                        _logger.LogError("Внутреннее исключение:");
                        _logger.LogError(e.InnerException.Message);
                    }

                    _logger.LogError(e.StackTrace);
                }
            }

            _logger.LogInformation($"Worker {num} остановлен");
        }