public static ValueTask <IActionResult> SynchronizePartitionAsync(this IActionResult result, DbTable dbTable, DbPartition partitionToSave, DataSynchronizationPeriod period) { if (ServiceLocator.SnapshotStorage == null) { return(new ValueTask <IActionResult>(result)); } if (period == DataSynchronizationPeriod.Immediately) { var partitionSnapshot = PartitionSnapshot.Create(dbTable, partitionToSave); return(result.ResponseWithActionAsync(() => ServiceLocator .SnapshotStorage .SavePartitionSnapshotAsync(partitionSnapshot))); } ServiceLocator.SnapshotSaverScheduler.SynchronizePartition(dbTable, partitionToSave, period); return(new ValueTask <IActionResult>(result)); }
public async Task TheLoop() { await LoadSnapshotsAsync(); while (!_appIsShuttingDown || ServiceLocator.SnapshotSaverScheduler.TasksToSyncCount() > 0) { try { var elementToSave = ServiceLocator.SnapshotSaverScheduler.GetTaskToSync(_appIsShuttingDown); while (elementToSave != null) { switch (elementToSave) { case SyncTable syncTable: await ServiceLocator.SnapshotStorage.SaveTableSnapshotAsync(syncTable.DbTable); break; case SyncPartition syncPartition: var partitionSnapshot = PartitionSnapshot.Create(syncPartition.DbTable, syncPartition.DbPartition); await ServiceLocator.SnapshotStorage.SavePartitionSnapshotAsync(partitionSnapshot); break; case SyncDeletePartition syncDeletePartition: await ServiceLocator.SnapshotStorage.DeleteTablePartitionAsync(syncDeletePartition.TableName, syncDeletePartition.PartitionKey); break; } elementToSave = ServiceLocator.SnapshotSaverScheduler.GetTaskToSync(_appIsShuttingDown); } } catch (Exception e) { Console.WriteLine("There is something wrong during saving the snapshot. " + e.Message); } }