using System; using System.Threading; using System.Threading.Tasks; using Windows.Foundation; #if WINDOWS_UWP namespace Xamarin.Forms.Platform.UWP #else namespace Xamarin.Forms.Platform.WinRT #endif { internal static class TaskExtensions { public static void WatchForError(this IAsyncAction self) { self.AsTask().WatchForError(); } public static void WatchForError(this IAsyncOperation self) { self.AsTask().WatchForError(); } public static void WatchForError(this Task self) { SynchronizationContext context = SynchronizationContext.Current; if (context == null) return; self.ContinueWith(t => { Exception exception = t.Exception.InnerExceptions.Count > 1 ? t.Exception : t.Exception.InnerException; context.Post(e => { throw (Exception)e; }, exception); }, CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.Default); } } }