public async Task EvaluateImagesOnline(IProgress <int> progress, CancellationToken cancellationToken) { // Sign into firebase. if (await FirebaseClient.Client.SignInPromptUserIfNecessary()) { // Find all media datas without annotation data. var mediaDatasWithoutAnnotationData = MediaDatas.Where(data => data.Meta.AnnotationData == null); var evaluated = 0; using (new DisposableLogger(GalleryLog.EvaluateOnlineBegin, (sw) => GalleryLog.EvaluateOnlineEnd(sw, evaluated))) { IsEvaluating = true; await mediaDatasWithoutAnnotationData.ForEachAsyncConcurrent(async media => { try { // Evaluate media thumbnail online. await media.EvaluateOnlineAsync(FirebaseClient.accessToken); } catch (Exception e) { // Log Exception. LifecycleLog.Exception(e); } finally { // Update and then report progress. evaluated++; progress.Report(evaluated); } }, cancellationToken, 5); IsEvaluating = false; } // Save online results to database. await DatabaseUtils.SaveAllMetadatasAsync(MediaDatas); } }