public override void OnCreate(Bundle savedInstanceState)
 {
     base.OnCreate(savedInstanceState);
     RetainInstance = true;
     downloaders = new List<Downloader>();
     mCallbacks = (TaskCallbacks)Activity;
 }
        public async Task<bool> StartTaskByTag(string tag, TaskCallbacks callbacks)
        {
            var selectedDownloader = downloaders.SingleOrDefault(s => s.TAG.Equals(tag));

            if (selectedDownloader == null)
            {
                return false;
            }
            if(selectedDownloader.IsRunning == false)
            {
                selectedDownloader.IsRunning = true;
                selectedDownloader.CancellationTokenSource = new CancellationTokenSource();
                SetUpTask(selectedDownloader);

                try
                {
                    selectedDownloader.Result = new List<string>();

                    await selectedDownloader.Task;
                    callbacks.OnPostExecute(selectedDownloader.TAG, selectedDownloader.Result);
                }
                catch (System.OperationCanceledException)
                {
                    callbacks.OnCancelled(selectedDownloader.TAG);
                }
                catch (Exception e)
                {
                    callbacks.OnFailed(selectedDownloader.TAG);
                }
                finally
                {
                    selectedDownloader.CancellationTokenSource = null;
                    selectedDownloader.IsRunning = false;
                    downloaders.Remove(downloaders.SingleOrDefault(s => s.TAG.Equals(tag)));
                    
                }
                return true;
            }
            return false;

        }
 public override void OnResume()
 {
     base.OnResume();
     mCallbacks = (TaskCallbacks)Activity;
 }