diff --git a/source/FFImageLoading.Common/Cache/DownloadCache.cs b/source/FFImageLoading.Common/Cache/DownloadCache.cs index 57a1cb842..a69b847b3 100644 --- a/source/FFImageLoading.Common/Cache/DownloadCache.cs +++ b/source/FFImageLoading.Common/Cache/DownloadCache.cs @@ -40,11 +40,14 @@ public virtual async Task DownloadAndCacheIfNeededAsync(string url, var diskStream = await configuration.DiskCache.TryGetStreamAsync(filename).ConfigureAwait(false); if (diskStream != null) { + token.ThrowIfCancellationRequested(); filePath = await configuration.DiskCache.GetFilePathAsync(filename).ConfigureAwait(false); return new CacheStream(diskStream, true, filePath); } } + token.ThrowIfCancellationRequested(); + var downloadInfo = new DownloadInformation(url, parameters.CustomCacheKey, filename, allowDiskCaching, duration); parameters.OnDownloadStarted?.Invoke(downloadInfo); @@ -62,7 +65,9 @@ public virtual async Task DownloadAndCacheIfNeededAsync(string url, await configuration.DiskCache.AddToSavingQueueIfNotExistsAsync(filename, responseBytes, duration).ConfigureAwait(false); } + token.ThrowIfCancellationRequested(); filePath = await configuration.DiskCache.GetFilePathAsync(filename).ConfigureAwait(false); + token.ThrowIfCancellationRequested(); var memoryStream = new MemoryStream(responseBytes, false); return new CacheStream(memoryStream, false, filePath); } diff --git a/source/FFImageLoading.Common/Work/ImageLoaderTask.cs b/source/FFImageLoading.Common/Work/ImageLoaderTask.cs index 7dbd3d49b..02943221c 100644 --- a/source/FFImageLoading.Common/Work/ImageLoaderTask.cs +++ b/source/FFImageLoading.Common/Work/ImageLoaderTask.cs @@ -242,6 +242,7 @@ await MainThreadDispatcher.PostAsync(() => } else { + ThrowIfCancellationRequested(); // Loading placeholder if enabled if (!isLoadingPlaceholderLoaded && !string.IsNullOrWhiteSpace(Parameters.LoadingPlaceholderPath)) { diff --git a/source/FFImageLoading.Droid/DataResolvers/BundleDataResolver.cs b/source/FFImageLoading.Droid/DataResolvers/BundleDataResolver.cs index 1ad6cbb97..3322959c7 100644 --- a/source/FFImageLoading.Droid/DataResolvers/BundleDataResolver.cs +++ b/source/FFImageLoading.Droid/DataResolvers/BundleDataResolver.cs @@ -12,6 +12,7 @@ public class BundleDataResolver : IDataResolver { public virtual Task> Resolve(string identifier, TaskParameter parameters, CancellationToken token) { + token.ThrowIfCancellationRequested(); var stream = Context.Assets.Open(identifier, Access.Streaming); if (stream == null) diff --git a/source/FFImageLoading.Droid/DataResolvers/FileDataResolver.cs b/source/FFImageLoading.Droid/DataResolvers/FileDataResolver.cs index 1b4985992..2cde26e5a 100644 --- a/source/FFImageLoading.Droid/DataResolvers/FileDataResolver.cs +++ b/source/FFImageLoading.Droid/DataResolvers/FileDataResolver.cs @@ -17,6 +17,8 @@ public virtual Task> Resolve(stri throw new FileNotFoundException(identifier); } + token.ThrowIfCancellationRequested(); + var stream = FileStore.GetInputStream(identifier, true); var imageInformation = new ImageInformation(); diff --git a/source/FFImageLoading.Droid/DataResolvers/ResourceDataResolver.cs b/source/FFImageLoading.Droid/DataResolvers/ResourceDataResolver.cs index fa0c39a16..15a70f601 100644 --- a/source/FFImageLoading.Droid/DataResolvers/ResourceDataResolver.cs +++ b/source/FFImageLoading.Droid/DataResolvers/ResourceDataResolver.cs @@ -20,6 +20,7 @@ public virtual Task> Resolve(stri int resourceId = 0; if (!_resourceIdentifiersCache.TryGetValue(resourceName, out resourceId)) { + token.ThrowIfCancellationRequested(); resourceId = Context.Resources.GetIdentifier(resourceName.ToLower(), "drawable", Context.PackageName); _resourceIdentifiersCache.TryAdd(resourceName.ToLower(), resourceId); } @@ -27,6 +28,7 @@ public virtual Task> Resolve(stri if (resourceId == 0) throw new FileNotFoundException(identifier); + token.ThrowIfCancellationRequested(); Stream stream = Context.Resources.OpenRawResource(resourceId); if (stream == null) diff --git a/source/FFImageLoading.Touch/DataResolvers/BundleDataResolver.cs b/source/FFImageLoading.Touch/DataResolvers/BundleDataResolver.cs index d519e0e01..a96021946 100644 --- a/source/FFImageLoading.Touch/DataResolvers/BundleDataResolver.cs +++ b/source/FFImageLoading.Touch/DataResolvers/BundleDataResolver.cs @@ -25,11 +25,15 @@ public virtual async Task> Resolv foreach (var fileType in fileTypes) { + token.ThrowIfCancellationRequested(); + int scale = (int)ScaleHelper.Scale; if (scale > 1) { while (scale > 1) { + token.ThrowIfCancellationRequested(); + var tmpFile = string.Format(pattern, filename, scale, extension); bundle = NSBundle._AllBundles.FirstOrDefault(bu => { @@ -46,6 +50,8 @@ public virtual async Task> Resolv } } + token.ThrowIfCancellationRequested(); + if (file == null) { file = identifier; @@ -56,6 +62,8 @@ public virtual async Task> Resolv }); } + token.ThrowIfCancellationRequested(); + if (bundle != null) { var path = bundle.PathForResource(file, fileType); @@ -71,6 +79,7 @@ public virtual async Task> Resolv } //Asset catalog + token.ThrowIfCancellationRequested(); if (UIDevice.CurrentDevice.CheckSystemVersion(9, 0)) { @@ -84,6 +93,7 @@ public virtual async Task> Resolv if (asset != null) { + token.ThrowIfCancellationRequested(); var stream = asset.Data?.AsStream(); var imageInformation = new ImageInformation(); imageInformation.SetPath(identifier); @@ -105,6 +115,7 @@ public virtual async Task> Resolv if (image != null) { + token.ThrowIfCancellationRequested(); var stream = image.AsPNG()?.AsStream(); var imageInformation = new ImageInformation(); imageInformation.SetPath(identifier); diff --git a/source/FFImageLoading.Touch/DataResolvers/FileDataResolver.cs b/source/FFImageLoading.Touch/DataResolvers/FileDataResolver.cs index 4e876a097..9bd43c668 100644 --- a/source/FFImageLoading.Touch/DataResolvers/FileDataResolver.cs +++ b/source/FFImageLoading.Touch/DataResolvers/FileDataResolver.cs @@ -23,6 +23,8 @@ public virtual Task> Resolve(stri while (scale > 1) { + token.ThrowIfCancellationRequested(); + var tmpFile = string.Format(pattern, filename, scale, extension); if (FileStore.Exists(tmpFile)) { @@ -38,6 +40,8 @@ public virtual Task> Resolve(stri file = identifier; } + token.ThrowIfCancellationRequested(); + if (!string.IsNullOrEmpty(file)) { var stream = FileStore.GetInputStream(file, true); diff --git a/source/FFImageLoading.Windows/DataResolvers/FileDataResolver.cs b/source/FFImageLoading.Windows/DataResolvers/FileDataResolver.cs index 38e313795..acbeb9e8c 100644 --- a/source/FFImageLoading.Windows/DataResolvers/FileDataResolver.cs +++ b/source/FFImageLoading.Windows/DataResolvers/FileDataResolver.cs @@ -32,6 +32,7 @@ public async virtual Task> Resolv imageInformation.SetPath(identifier); imageInformation.SetFilePath(identifier); + token.ThrowIfCancellationRequested(); var stream = await file.OpenStreamForReadAsync(); return new Tuple(stream, LoadingResult.Disk, imageInformation); diff --git a/source/FFImageLoading.Windows/DataResolvers/ResourceDataResolver.cs b/source/FFImageLoading.Windows/DataResolvers/ResourceDataResolver.cs index 93aba9e73..cd9c84007 100644 --- a/source/FFImageLoading.Windows/DataResolvers/ResourceDataResolver.cs +++ b/source/FFImageLoading.Windows/DataResolvers/ResourceDataResolver.cs @@ -44,6 +44,7 @@ public async virtual Task> Resolv imageInformation.SetPath(identifier); imageInformation.SetFilePath(file.Path); + token.ThrowIfCancellationRequested(); var stream = await file.OpenStreamForReadAsync(); return new Tuple(stream, LoadingResult.CompiledResource, imageInformation);