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