| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- using System;
 
- using System.Runtime.CompilerServices;
 
- using System.Threading;
 
- using System.Threading.Tasks;
 
- using Xamarin.Forms;
 
- namespace InABox.Mobile.Shared
 
- {
 
-     
 
-     public struct SynchronizationContextAwaiter : INotifyCompletion
 
-     {
 
-         private static readonly SendOrPostCallback _postCallback = state => ((Action)state)();
 
-         private readonly SynchronizationContext _context;
 
-         public SynchronizationContextAwaiter(SynchronizationContext context)
 
-         {
 
-             _context = context;
 
-         }
 
-         public bool IsCompleted => _context == SynchronizationContext.Current;
 
-         public void OnCompleted(Action continuation) => _context.Post(_postCallback, continuation);
 
-         public void GetResult() { }
 
-     }
 
-     
 
-     public static class TaskExtensions
 
-     {
 
-         public static void BeginInvokeOnMainThread(this Task task, Action<Task> action)
 
-         {
 
-             task.ContinueWith((task) =>
 
-             {
 
-                 Device.BeginInvokeOnMainThread(() => action(task));
 
-             });
 
-         }
 
-         
 
-         public static SynchronizationContextAwaiter GetAwaiter(this SynchronizationContext context)
 
-         {
 
-             return new SynchronizationContextAwaiter(context);
 
-         }
 
-     }
 
- }
 
 
  |