/// <summary>
        /// 	Download the Images.
        /// </summary>
        /// <returns>The download.</returns>
        /// <param name="url">URL.</param>
        public async Task<CacheModel> ImageDownload(string url)
        {
            try
            {
                if (url == null) return null;

                SetData();

                var filename = url.Substring(url.LastIndexOf("/") + 1);

                if (GetCache(url) != null) return GetCache(url);
                if (await FileHelper.ValidateFile(filename) && GetCache(url) == null)
                {
                    CacheModel cache = new CacheModel(url, await FileHelper.GetFilePath("thumbnail_" + filename), await FileHelper.GetFilePath(filename));
                    Instance._cache.Add(cache);
                    return cache;
                }

                try
                {
                    AddTaskIndex(url);
                    RunningAsyncTasks runningAsyncTask = GetRunningAsyncTask(url);
                    await runningAsyncTask._asyncCache;
                    RemoveTaskIndex(url);
                    return GetCache(url);
                }
                catch (NullReferenceException) { }

                AddTaskIndex(url);
                AsyncRequest downloadimage = new AsyncRequest().SetUrl(url);
                RunningAsyncTasks running = new RunningAsyncTasks(downloadimage, SetCache(url, filename, downloadimage.ExecuteTask()));
                Instance._requests.Add(running);
                return await running._asyncCache;
            }
#if __ANDROID__
			catch (OutOfMemoryError ex) 
			{
				Debug.WriteLine ("[AsyncStructure][ImageDownload] Out of Memory Error: " + ex.Message + " on this URL: " + url);
				return null;
			}
			catch (NullPointerException ex)
			{
				Debug.WriteLine ("[AsyncStructure][ImageDownload] Null Pointer Exception Error: " + ex.Message + " on this URL: " + url);
				return null;
			}
#endif
#if __IOS__
#endif
#if WINDOWS_PHONE
            catch (System.IO.FileNotFoundException ex)
            {
                Debug.WriteLine("[AsyncStructure][ImageDownload] File Not Found Exception Error: " + ex.Message + " on this URL: " + url);
                return null;
            }
            catch (System.InvalidOperationException ex)
            {
                Debug.WriteLine("[AsyncStructure][ImageDownload] Invalid Operation Exception Error: " + ex.Message + " on this URL: " + url);
                return null;
            }

#endif
            catch (OutOfMemoryException exmem)
            {
                Debug.WriteLine("[AsyncStructure][ImageDownload] Out of memory Error: " + exmem.Message + " on this URL: " + url);
                return null;
            }
            catch (NullReferenceException exmem)
            {
                Debug.WriteLine("[AsyncStructure][ImageDownload] Null reference Error: " + exmem.Message + " on this URL: " + url);
                return null;
            }
            catch (PlatformNotSupportedException exmem)
            {
                Debug.WriteLine("[AsyncStructure][ImageDownload] Platform not supported Error: " + exmem.Message + " on this URL: " + url);
                return null;
            }
            catch (System.Exception exmem)
            {
                Debug.WriteLine("[AsyncStructure][ImageDownload] System Exception Error: " + exmem.Message + " on this URL: " + url);
                return null;
            }
        }
        /// <summary>
        ///     Sets Files and cache model
        /// </summary>
        /// <param name="url">URL of the HTTP request</param>
        /// <param name="filename">name of the file to be generated</param>
        /// <param name="imagedownloaded">array of bytes</param>
        /// <returns>Object of the CacheModel class, null if there aren't any</returns>
        private async Task<CacheModel> SetCache(string url, string filename, Task<byte[]> imagedownloaded)
        {
            var image = await imagedownloaded;
            if (image != null)
            {
				var imagedownloadedresized = await ImageResizer.ResizeImage(image, 50, 50);
                await FileHelper.WriteToFile(filename, image);
                await FileHelper.WriteToFile("thumbnail_" + filename, imagedownloadedresized);
                CacheModel cache = new CacheModel(url, await FileHelper.GetFilePath("thumbnail_" + filename), await FileHelper.GetFilePath(filename));
                Instance._cache.Add(cache);
                RemoveTaskIndex(url);
                return cache;
            }

            RemoveTaskIndex(url);
            return null;
        }