using System; using System.Threading.Tasks; using Windows.UI.Core; namespace ModernKeePass.Extensions { public static class DispatcherTaskExtensions { public static async Task RunTaskAsync(this CoreDispatcher dispatcher, Func> func, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal) { var taskCompletionSource = new TaskCompletionSource(); await dispatcher.RunAsync(priority, async () => { try { taskCompletionSource.SetResult(await func()); } catch (Exception ex) { taskCompletionSource.SetException(ex); } }); return await taskCompletionSource.Task; } // There is no TaskCompletionSource so we use a bool that we throw away. public static async Task RunTaskAsync(this CoreDispatcher dispatcher, Func func, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal) => await RunTaskAsync(dispatcher, async () => { await func(); return false; }, priority); } }