public Task <bool> Start()
        {
            MvxTrace.TaggedTrace(MvxTraceLevel.Diagnostic, "Geofencing", "Start");

            var  tcs    = new TaskCompletionSource <bool>();
            bool result = false;

            UIKit.UIApplication.SharedApplication.InvokeOnMainThread(async() =>
            {
                result = await GeofencingUtil.RequestPermissionAsync();

                if (result)
                {
                    GeofencingProvider.UpdateRegionLeft += OnUpdateRegionLeft;
                    GeofencingProvider.RegionEntered    += OnRegionEntered;
                    GeofencingProvider.InitGeoFencing();

                    await SetupRegions();
                }

                tcs.TrySetResult(result);
            });

            return(tcs.Task);
        }
        public async Task Stop()
        {
            MvxTrace.TaggedTrace(MvxTraceLevel.Error, "Geofencing", "Stop");

            var result = await GeofencingUtil.RequestPermissionAsync();

            if (result)
            {
                GeofencingProvider.UpdateRegionLeft -= OnUpdateRegionLeft;
                GeofencingProvider.RegionEntered    -= OnRegionEntered;

                GeofencingProvider.SetRegions(new System.Collections.Generic.List <CoreLocation.CLCircularRegion>());
            }
        }