BetterCms.Module.MediaManager.Services.DefaultMediaImageService.StartTasksForImageAsync C# (CSharp) Method

StartTasksForImageAsync() private method

private StartTasksForImageAsync ( BetterCms.Module.MediaManager.Models.MediaImage mediaImage, Stream fileStream, MemoryStream thumbnailFileStream, bool shouldNotUploadOriginal = false ) : void
mediaImage BetterCms.Module.MediaManager.Models.MediaImage
fileStream Stream
thumbnailFileStream System.IO.MemoryStream
shouldNotUploadOriginal bool
return void
        private void StartTasksForImageAsync(
            MediaImage mediaImage,
            Stream fileStream,
            MemoryStream thumbnailFileStream,
            bool shouldNotUploadOriginal = false)
        {
            var allTasks = new List<Task>();

            var publicImageUpload = mediaFileService.UploadMediaFileToStorageAsync<MediaImage>(
                fileStream,
                mediaImage.FileUri,
                mediaImage.Id,
                (img, session) =>
                {
                    if (img != null)
                    {
                        img.IsUploaded = true;
                    }
                },
                img =>
                {
                    if (img != null)
                    {
                        img.IsUploaded = false;
                    }
                },
                true);
            allTasks.Add(publicImageUpload);

            var publicThumbnailUpload = mediaFileService.UploadMediaFileToStorageAsync<MediaImage>(
                thumbnailFileStream,
                mediaImage.ThumbnailUri,
                mediaImage.Id,
                (img, session) =>
                {
                    if (img != null)
                    {
                        img.IsThumbnailUploaded = true;
                    }
                },
                img =>
                {
                    if (img != null)
                    {
                        img.IsThumbnailUploaded = false;
                    }
                },
                true);
            allTasks.Add(publicThumbnailUpload);

            Task publicOriginalUpload = null;
            if (!shouldNotUploadOriginal)
            {
                publicOriginalUpload = mediaFileService.UploadMediaFileToStorageAsync<MediaImage>(
                fileStream,
                mediaImage.OriginalUri,
                mediaImage.Id,
                (img, session) =>
                {
                    if (img != null)
                    {
                        img.IsOriginalUploaded = true;
                    }
                },
                img =>
                {
                    if (img != null)
                    {
                        img.IsOriginalUploaded = false;
                    }
                },
                true);
                allTasks.Add(publicOriginalUpload);
            }

            allTasks.ForEach(task => task.ContinueWith((t) => { Log.Error("Error observed while executing parallel task during image upload.", t.Exception); }, TaskContinuationOptions.OnlyOnFaulted));

            Task.Factory.ContinueWhenAll(
                allTasks.ToArray(),
                result =>
                    {
                        try
                        {
                            ExecuteActionOnThreadSeparatedSessionWithNoConcurrencyTracking(
                                session =>
                                    {
                                        var media = session.Get<MediaImage>(mediaImage.Id);
                                        if (media != null)
                                        {
                                            OnAfterUploadCompleted(media, shouldNotUploadOriginal);
                                        }
                                    });
                        }
                        catch (Exception ex)
                        {
                            Log.Error("Failed to finalize upload.", ex);
                        }
                    });

            publicImageUpload.Start();
            if (publicOriginalUpload != null)
            {
                publicOriginalUpload.Start();
            }
            if (publicThumbnailUpload != null)
            {
                publicThumbnailUpload.Start();
            }
        }