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;
}
}