private void CreateCardSource(Card card, bool shouldPollWithBlockingMethod)
        {
            SourceParams         cardSourceParams     = SourceParams.CreateCardParams(card);
            IObservable <Source> cardSourceObservable = System.Reactive.Linq.Observable.FromAsync(() =>
            {
                return(Task.Run(
                           () => mStripe.CreateSourceSynchronous(cardSourceParams, FUNCTIONAL_SOURCE_PUBLISHABLE_KEY)));
            });

            mCompositeSubscription.Add(cardSourceObservable
                                       .SubscribeOn(Scheduler.Default)
                                       .ObserveOn(Scheduler.CurrentThread)
                                       .Do((s) =>
            {
                RunOnUiThread(() =>
                {
                    mProgressDialogController.SetMessageResource(Resource.String.createSource);
                    mProgressDialogController.StartProgress();
                });
            })
                                       .Subscribe(
                                           (s) =>
            {
                try
                {
                    SourceCardData sourceCardData = (SourceCardData)s.SourceTypeModel;
                    RunOnUiThread(() =>
                    {
                        mPollingAdapter.AddItem(
                            s.Status,
                            sourceCardData.ThreeDSecureStatus,
                            s.Id,
                            s.Type);

                        // If we need to get 3DS verification for this card, we
                        // first create a 3DS Source.
                        if (SourceCardData.Required.Equals(
                                sourceCardData.ThreeDSecureStatus))
                        {
                            // The card Source can be used to create a 3DS Source
                            CreateThreeDSecureSource(s.Id,
                                                     shouldPollWithBlockingMethod);
                        }
                        else
                        {
                            mProgressDialogController.FinishProgress();
                        }
                    });
                }
                catch (Exception e)
                {
                    mProgressDialogController.FinishProgress();
                    mErrorDialogHandler.ShowError(e.Message);
                }
                // Making a note of the Card Source in our list.
            },
                                           (t) =>
            {
                RunOnUiThread(() =>
                {
                    mErrorDialogHandler.ShowError(t.Message);
                });
            }));
        }