private IObservable<Unit> SynchronizeFile(IFileNotification file, IFileSynchronizerVisitor visitor) { return Observable.FromAsync(async ct => await file.Accept(ct, visitor), _notificationsScheduler) .Do(_ => { _transcodingResultNotifications.OnNext(FileTranscodingResultNotification.CreateSuccess(file)); _numberOfFilesAddedInTranscodingQueue.OnNext(-1); }) .Catch((Exception ex) => { _transcodingResultNotifications.OnNext(FileTranscodingResultNotification.CreateFailure(file, ex)); _numberOfFilesAddedInTranscodingQueue.OnNext(-1); return Observable.Return(Unit.Default, ImmediateScheduler.Instance); }); }
protected override async Task AcceptInternal(CancellationToken ct, IFileSynchronizerVisitor visitor) { await visitor.Visit(ct, this); }
public Task Accept(CancellationToken ct, IFileSynchronizerVisitor visitor) { if (visitor == null) throw new ArgumentNullException(nameof(visitor)); return AcceptInternal(ct, visitor); }
public LoggingFileSynchronizerVisitor(IFileSynchronizerVisitor innerVisitor, ILogger log) { _innerVisitor = Guard.ForNull(innerVisitor, nameof(innerVisitor)); _log = Guard.ForNull(log, nameof(log)); }
protected abstract Task AcceptInternal(CancellationToken ct, IFileSynchronizerVisitor visitor);