Acr.Geofencing.GeofenceManagerImpl.RequestState C# (CSharp) Method

RequestState() public method

public RequestState ( GeofenceRegion region, CancellationToken cancelToken ) : Task
region GeofenceRegion
cancelToken System.Threading.CancellationToken
return Task
        public async Task<GeofenceStatus> RequestState(GeofenceRegion region, CancellationToken? cancelToken)
        {
            var tcs = new TaskCompletionSource<GeofenceStatus>();
            cancelToken?.Register(() => tcs.TrySetCanceled());

            var handler = new EventHandler<CLRegionStateDeterminedEventArgs>((sender, args) =>
            {
                var clregion = args.Region as CLCircularRegion;
                if (clregion?.Identifier.Equals(region.Identifier) ?? false)
                {
                    var state = this.FromNative(args.State);
                    tcs.TrySetResult(state);
                }
            });

            try
            {
                this.locationManager.DidDetermineState += handler;
                var native = this.ToNative(region);
                this.locationManager.RequestState(native);
                return await tcs.Task;
            }
            finally
            {
                this.locationManager.DidDetermineState -= handler;
            }
        }