using System; using System.Threading.Tasks; using Windows.UI.Core; namespace ADAL3WinMDProxy { internal static class CoreDispatcherExtensions { public static async Task RunAndAwaitAsync(this CoreDispatcher dispatcher, CoreDispatcherPriority priority, Func> asyncFunction) { var taskCompletionSource = new TaskCompletionSource(); await dispatcher.RunAsync(priority, async () => { try { var result = await asyncFunction().ConfigureAwait(false); taskCompletionSource.TrySetResult(result); } catch (Exception ex) { taskCompletionSource.TrySetException(ex); } }); return await taskCompletionSource.Task.ConfigureAwait(false); } } }