using Microsoft.Extensions.Hosting; namespace OwnerNumberMigration.Migrations; public class MigrationManager : IMigrationManager { private readonly IHostApplicationLifetime _appLifetime; private readonly IList _migrationTasks = new List(); private static readonly IReadOnlySet CompletedStatuses = new HashSet { 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(); } } }); } }