/// <summary> /// Runs the specified progress. /// </summary> /// <param name="progress">The progress.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public async Task Run(IProgress <double> progress, CancellationToken cancellationToken) { var files = _libraryManager.GetAllIntroFiles().ToList(); var numComplete = 0; foreach (var file in files) { cancellationToken.ThrowIfCancellationRequested(); try { await RefreshIntro(file, cancellationToken).ConfigureAwait(false); } catch (OperationCanceledException) { throw; } catch (Exception ex) { _logger.ErrorException("Error refreshing intro {0}", ex, file); } numComplete++; double percent = numComplete; percent /= files.Count; progress.Report(percent * 100); } }