37 lines
981 B
C#
37 lines
981 B
C#
using Microsoft.Extensions.Hosting;
|
|
|
|
namespace OwnerNumberMigration.Migrations;
|
|
|
|
public class MigrationManager : IMigrationManager
|
|
{
|
|
private readonly IHostApplicationLifetime _appLifetime;
|
|
private readonly IList<Task> _migrationTasks = new List<Task>();
|
|
|
|
private static readonly IReadOnlySet<TaskStatus> CompletedStatuses = new HashSet<TaskStatus>
|
|
{
|
|
TaskStatus.Faulted,
|
|
TaskStatus.Canceled,
|
|
TaskStatus.RanToCompletion
|
|
};
|
|
|
|
public MigrationManager(IHostApplicationLifetime appLifetime)
|
|
{
|
|
_appLifetime = appLifetime;
|
|
}
|
|
|
|
public void Start(Task migrationTask)
|
|
{
|
|
_migrationTasks.Add(migrationTask);
|
|
|
|
migrationTask.ContinueWith(_ =>
|
|
{
|
|
lock (_migrationTasks)
|
|
{
|
|
if (_migrationTasks.All(t => CompletedStatuses.Contains(t.Status)))
|
|
{
|
|
_appLifetime.StopApplication();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
} |