MES-ETL/ConsoleApp2/HostedServices/MainHostedService.cs

73 lines
2.2 KiB
C#
Raw Normal View History

2024-01-04 09:00:44 +08:00
using ConsoleApp2.HostedServices.Abstractions;
2024-01-12 16:50:37 +08:00
using ConsoleApp2.Services;
2024-01-04 09:00:44 +08:00
using Microsoft.Extensions.Hosting;
2024-01-12 16:50:37 +08:00
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
2024-01-04 09:00:44 +08:00
namespace ConsoleApp2.HostedServices;
public class MainHostedService : BackgroundService
{
2024-01-12 16:50:37 +08:00
private readonly ILogger _logger;
2024-01-04 09:00:44 +08:00
private readonly IInputService _input;
private readonly ITransformService _transform;
private readonly IOutputService _output;
2024-01-12 16:50:37 +08:00
private readonly ProcessContext _context;
2024-01-04 09:00:44 +08:00
2024-01-12 16:50:37 +08:00
public MainHostedService(ILogger<MainHostedService> logger, IInputService input, ITransformService transform, IOutputService output, ProcessContext context)
2024-01-04 09:00:44 +08:00
{
2024-01-12 16:50:37 +08:00
_logger = logger;
2024-01-04 09:00:44 +08:00
_input = input;
_transform = transform;
_output = output;
2024-01-12 16:50:37 +08:00
_context = context;
2024-01-04 09:00:44 +08:00
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
2024-01-12 16:50:37 +08:00
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 () =>
2024-01-04 09:00:44 +08:00
{
2024-01-12 16:50:37 +08:00
try
{
await _output.ExecuteAsync(stoppingToken);
}
catch (Exception ex)
{
_context.AddException(ex);
_logger.LogError("Exception occurred on outputService:{Message},{StackTrace}", ex.Message, ex.StackTrace);
}
});
2024-01-04 09:00:44 +08:00
// await Task.Run(async () => await _output.ExecuteAsync(stoppingToken), stoppingToken);
}
}