private static async Task RenderThumbnailAsync
        (
            this PortableAsyncRenderer <Bitmap> asyncRenderer,
            PortableCorrelatedEntity correlatedEntity,
            Action <Action> runOnUiThread,
            AndroidCachingImageView thumbnailView,
            int thumbnailWidth,
            int thumbnailHeight,
            Resources activityResources,
            Drawable originalBackground,
            AnimationDrawable loadingAnimation,
            Action <CorruptObjectException, ImageView> onCorrupt,
            Action <ImageView, Drawable, AnimationDrawable, bool> onFinished
        )
        {
            bool isLoaded = false;

            if (correlatedEntity.CorrelationTag != thumbnailView.GetCorrelationTag())
            {
                onFinished?.Invoke(thumbnailView,
                                   originalBackground,
                                   loadingAnimation,
                                   isLoaded);
                return;
            }

            Bitmap thumbnailBitmap = null;
            CorruptObjectException thumbnailException = null;

            BitmapDrawable thumbnailDrawable = AndroidCrapApplication.GetDrawableFromCache
                                               (
                correlatedEntity.CorrelationTag
                                               );

            if (thumbnailDrawable == null)
            {
                try
                {
                    /*thumbnailDrawable = AndroidCrapApplication.GetReusableBitmapDrawable(thumbnailWidth,
                     *                                                                   thumbnailHeight);*/
                    thumbnailBitmap = await asyncRenderer.GetThumbnailAsync
                                      (
                        correlatedEntity,
                        () => thumbnailView.GetCorrelationTag(),
                        thumbnailWidth,
                        thumbnailHeight//,
                        //thumbnailDrawable.Bitmap
                                      );
                }
                catch (Exception exception)
                {
                    AndroidCrapApplication.ApplicationLogger.LogError(exception);
                    thumbnailBitmap?.Dispose();

                    thumbnailException = exception as CorruptObjectException;

                    if (thumbnailException == null)
                    {
                        throw;
                    }
                    else
                    {
                        runOnUiThread
                        (
                            () => onCorrupt(thumbnailException,
                                            thumbnailView)
                        );
                    }

                    onFinished?.Invoke(thumbnailView,
                                       originalBackground,
                                       loadingAnimation,
                                       isLoaded);
                    return;
                }

                if (correlatedEntity.CorrelationTag != thumbnailView.GetCorrelationTag())
                {
                    thumbnailBitmap?.Dispose();

                    onFinished?.Invoke(thumbnailView,
                                       originalBackground,
                                       loadingAnimation,
                                       isLoaded);
                    return;
                }

                if (thumbnailBitmap == null)
                {
                    onFinished?.Invoke(thumbnailView,
                                       originalBackground,
                                       loadingAnimation,
                                       isLoaded);
                    return;
                }

                thumbnailDrawable = AndroidCrapApplication.AddBitmapToCache
                                    (
                    correlatedEntity.CorrelationTag,
                    thumbnailBitmap,
                    activityResources
                                    );
            }

            isLoaded = true;

            onFinished?.Invoke(thumbnailView,
                               originalBackground,
                               loadingAnimation,
                               isLoaded);
            runOnUiThread
            (
                () => { thumbnailView.SetImageDrawable(thumbnailDrawable); }
            );

            /*AndroidCrapApplication.ApplicationLogger.LogDebug("{0} : {1}",
             *                                                correlatedEntity.CorrelationTag,
             *                                                GC.GetTotalMemory(false));*/
        }