adding
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using OwnerNumberMigration.ValueParsing;
|
||||
|
||||
namespace OwnerNumberMigration.Migrations;
|
||||
|
||||
public abstract class AttributeMigrationTask<T> : IHostedService
|
||||
{
|
||||
private readonly IAttributeMigration _migration;
|
||||
private readonly CancellationTokenSource _cancellation = new();
|
||||
private readonly IMigrationManager _manager;
|
||||
|
||||
private Task? _runningMigration;
|
||||
|
||||
protected AttributeMigrationTask
|
||||
(
|
||||
string sourceAttribute,
|
||||
string destinationAttribute,
|
||||
AttributeMigrationFactory<T> factory,
|
||||
IParsingStrategyFactory strategyFactory,
|
||||
IMigrationManager manager
|
||||
)
|
||||
{
|
||||
_manager = manager;
|
||||
_migration = factory
|
||||
(
|
||||
sourceAttribute,
|
||||
strategyFactory.CreateParsingStrategy<T>(sourceAttribute),
|
||||
destinationAttribute
|
||||
);
|
||||
}
|
||||
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
if (cancellationToken.IsCancellationRequested) return Task.CompletedTask;
|
||||
|
||||
_manager.Start(_runningMigration = _migration.Migrate(_cancellation.Token));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public async Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
if (_runningMigration is not null)
|
||||
{
|
||||
if (!_runningMigration.IsCompleted)
|
||||
{
|
||||
_cancellation.Cancel();
|
||||
try
|
||||
{
|
||||
await _runningMigration;
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
_runningMigration.Dispose();
|
||||
}
|
||||
|
||||
_cancellation.Dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user