public SynchronizationJob Create(SyncInfo info, CancellationToken cancellationToken) { try { return(_inner.Create(info, cancellationToken)); } catch (Exception exception) { _logger.LogError(exception, "Failed to create job \"{JobName}\".", info?.Name); throw; } }
public SynchronizationJob Create(SyncInfo info, CancellationToken cancellationToken) { try { return(_inner.Create(info, cancellationToken)); } #pragma warning disable CA1031 // Do not catch general exception types -- required for robustness catch #pragma warning restore CA1031 // Do not catch general exception types { var cancel = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); try { return(new SynchronizationJob(Task.Delay(DelayBetweenErrors, cancellationToken), cancel)); } catch { cancel.Dispose(); throw; } } }
public async Task Synchronize(CancellationToken cancellationToken) { HashSet <SyncInfo> infos; try { var task = Task.Delay(997, cancellationToken); infos = _infos.ToHashSet(); await task; } catch (OperationCanceledException) { infos = new HashSet <SyncInfo>(); } foreach (var(info, job) in _jobs) { if (job.Value.IsCompleted) { await CompleteJob(info, cancel : false); } else if (!infos.Contains(info)) { await CompleteJob(info, cancel : true); } } cancellationToken.ThrowIfCancellationRequested(); foreach (var info in infos) { _jobs.GetOrAdd(info, TaskFactory); } Lazy <SynchronizationJob> TaskFactory(SyncInfo info) => new Lazy <SynchronizationJob>(() => _jobFactory.Create(info, cancellationToken)); }