public Task <Position> GetPositionAsync(int timeout, CancellationToken token, bool includeHeading) { if (timeout < 0) { throw new ArgumentOutOfRangeException("timeout"); } IAsyncOperation <Geoposition> pos = GetGeolocator().GetGeopositionAsync(TimeSpan.FromTicks(0), TimeSpan.FromDays(365)); token.Register(o => ((IAsyncOperation <Geoposition>)o).Cancel(), pos); Timeout timer = new Timeout(timeout, pos.Cancel); var tcs = new TaskCompletionSource <Position>(); pos.Completed = (op, s) => { timer.Cancel(); switch (s) { case AsyncStatus.Canceled: tcs.SetCanceled(); break; case AsyncStatus.Completed: tcs.SetResult(GetPosition(op.GetResults())); break; case AsyncStatus.Error: Exception ex = op.ErrorCode; if (ex is UnauthorizedAccessException) { ex = new GeolocationException(GeolocationError.Unauthorized, ex); } tcs.SetException(ex); break; } }; return(tcs.Task); }
public Task <Position> GetPositionAsync(int timeout, bool includeHeading) { if (timeout < 0) { throw new ArgumentOutOfRangeException("timeout"); } // The built in timeout does not cancel, it throws an exception, so we'll setup our own. IAsyncOperation <Geoposition> pos = GetGeolocator().GetGeopositionAsync(TimeSpan.Zero, TimeSpan.FromDays(365)); Timeout timer = new Timeout(timeout, pos.Cancel); var tcs = new TaskCompletionSource <Position>(); pos.Completed = (op, s) => { timer.Cancel(); switch (s) { case AsyncStatus.Canceled: tcs.SetCanceled(); break; case AsyncStatus.Completed: tcs.SetResult(GetPosition(op.GetResults())); break; case AsyncStatus.Error: Exception ex = op.ErrorCode; if (ex is UnauthorizedAccessException) { ex = new GeolocationException(GeolocationError.Unauthorized, ex); } tcs.SetException(ex); break; } }; return(tcs.Task); }
public Task<Position> GetPositionAsync (int timeout, bool includeHeading) { if (timeout < 0) throw new ArgumentOutOfRangeException ("timeout"); // The built in timeout does not cancel, it throws an exception, so we'll setup our own. IAsyncOperation<Geoposition> pos = GetGeolocator().GetGeopositionAsync (TimeSpan.Zero, TimeSpan.FromDays (365)); Timeout timer = new Timeout (timeout, pos.Cancel); var tcs = new TaskCompletionSource<Position>(); pos.Completed = (op, s) => { timer.Cancel(); switch (s) { case AsyncStatus.Canceled: tcs.SetCanceled(); break; case AsyncStatus.Completed: tcs.SetResult (GetPosition (op.GetResults())); break; case AsyncStatus.Error: Exception ex = op.ErrorCode; if (ex is UnauthorizedAccessException) ex = new GeolocationException (GeolocationError.Unauthorized, ex); tcs.SetException (ex); break; } }; return tcs.Task; }
public Task<Position> GetPositionAsync (int timeout, CancellationToken token, bool includeHeading) { if (timeout < 0) throw new ArgumentOutOfRangeException ("timeout"); IAsyncOperation<Geoposition> pos = GetGeolocator().GetGeopositionAsync (TimeSpan.FromTicks (0), TimeSpan.FromDays (365)); token.Register (o => ((IAsyncOperation<Geoposition>)o).Cancel(), pos); Timeout timer = new Timeout (timeout, pos.Cancel); var tcs = new TaskCompletionSource<Position>(); pos.Completed = (op, s) => { timer.Cancel(); switch (s) { case AsyncStatus.Canceled: tcs.SetCanceled(); break; case AsyncStatus.Completed: tcs.SetResult (GetPosition (op.GetResults())); break; case AsyncStatus.Error: Exception ex = op.ErrorCode; if (ex is UnauthorizedAccessException) ex = new GeolocationException (GeolocationError.Unauthorized, ex); tcs.SetException (ex); break; } }; return tcs.Task; }