using ConsoleApp2.HostedServices.Abstractions; using ConsoleApp2.Services; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System.Threading.Tasks; namespace ConsoleApp2.HostedServices; public class MainHostedService : BackgroundService { private readonly ILogger _logger; private readonly IInputService _input; private readonly ITransformService _transform; private readonly IOutputService _output; private readonly ProcessContext _context; public MainHostedService(ILogger logger, IInputService input, ITransformService transform, IOutputService output, ProcessContext context) { _logger = logger; _input = input; _transform = transform; _output = output; _context = context; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var inputTask = Task.Factory.StartNew(async () => { try { await _input.ExecuteAsync(stoppingToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on inputService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); var transformTask = Task.Factory.StartNew(async () => { try { await _transform.ExecuteAsync(stoppingToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on transformService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); var outputTask = Task.Factory.StartNew(async () => { try { await _output.ExecuteAsync(stoppingToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on outputService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); // await Task.Run(async () => await _output.ExecuteAsync(stoppingToken), stoppingToken); } }