From 7525d318c0c38a42c7772e0d9cc6e33488ab5cb1 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Thu, 28 Jul 2022 11:03:22 -0600 Subject: [PATCH] Crean up helper methods --- .../LibationAvalonia/AvaloniaThreadUtils.cs | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/Source/LibationAvalonia/AvaloniaThreadUtils.cs b/Source/LibationAvalonia/AvaloniaThreadUtils.cs index b14f6ec0..93213183 100644 --- a/Source/LibationAvalonia/AvaloniaThreadUtils.cs +++ b/Source/LibationAvalonia/AvaloniaThreadUtils.cs @@ -7,35 +7,25 @@ namespace Avalonia.Threading internal static class AvaloniaThreadUtils { public static TResult Invoke(this Dispatcher dispatcher, Func function, DispatcherPriority dispatcherPriority = DispatcherPriority.Normal) - { - using var source = new CancellationTokenSource(); - var task = dispatcher.InvokeAsync(function, dispatcherPriority); - task.ContinueWith(t => source.Cancel(), TaskScheduler.FromCurrentSynchronizationContext()); - dispatcher.MainLoop(source.Token); - return task.Result; - } + => WaitOnDispatcherAndGetResult(dispatcher.InvokeAsync(function, dispatcherPriority), dispatcher); public static void Invoke(this Dispatcher dispatcher, Action action, DispatcherPriority dispatcherPriority = DispatcherPriority.Normal) - { - using var source = new CancellationTokenSource(); - var task = dispatcher.InvokeAsync(action, dispatcherPriority); - task.ContinueWith(t => source.Cancel(), TaskScheduler.FromCurrentSynchronizationContext()); - Dispatcher.UIThread.MainLoop(source.Token); - } + => WaitOnDispatcher(dispatcher.InvokeAsync(action, dispatcherPriority), dispatcher); - public static T WaitOnUIAndGetResult(this Task task) + public static TResult WaitOnUIAndGetResult(this Task task) => WaitOnDispatcherAndGetResult(task, Dispatcher.UIThread); - public static T WaitOnDispatcherAndGetResult(this Task task, Dispatcher dispatcher) - { - using var source = new CancellationTokenSource(); - task.ContinueWith(t => source.Cancel(), TaskScheduler.FromCurrentSynchronizationContext()); - dispatcher.MainLoop(source.Token); - return task.Result; - } - public static void WaitOnUI(this Task task) => WaitOnDispatcher(task, Dispatcher.UIThread); + + public static TResult WaitOnDispatcherAndGetResult(this Task task, Dispatcher dispatcher) + { + using var source = new CancellationTokenSource(); + task.ContinueWith(t => source.Cancel(), TaskScheduler.FromCurrentSynchronizationContext()); + dispatcher.MainLoop(source.Token); + return task.Result; + } + public static void WaitOnDispatcher(this Task task, Dispatcher dispatcher) { using var source = new CancellationTokenSource();