Files
FluentTerminal/FluentTerminal.App/Utilities/DispatcherExtensions.cs
Aleksandar Pesic 83b9b0d457 CS4014 warning solved (#622)
* Fixing async patterns in IThemeParser.

* CS4014 warning solved.
2019-12-05 15:26:15 +01:00

54 lines
1.5 KiB
C#

using System;
using System.Threading.Tasks;
using Windows.UI.Core;
namespace FluentTerminal.App.Utilities
{
internal static class DispatcherExtensions
{
internal static Task ExecuteAsync(this CoreDispatcher dispatcher, Action action,
CoreDispatcherPriority priority = CoreDispatcherPriority.Normal, bool enforceNewSchedule = false)
{
if (enforceNewSchedule || !dispatcher.HasThreadAccess)
{
return dispatcher.RunAsync(priority, () => action()).AsTask();
}
action();
return Task.CompletedTask;
}
internal static Task<T> ExecuteAsync<T>(this CoreDispatcher dispatcher, Func<T> func,
CoreDispatcherPriority priority = CoreDispatcherPriority.Normal, bool enforceNewSchedule = false)
{
if (!enforceNewSchedule && dispatcher.HasThreadAccess)
{
return Task.FromResult(func());
}
var tcs = new TaskCompletionSource<T>();
// ReSharper disable once AssignmentIsFullyDiscarded
_ = dispatcher.RunAsync(priority, () =>
{
T val;
try
{
val = func();
}
catch (Exception e)
{
tcs.TrySetException(e);
return;
}
tcs.TrySetResult(val);
});
return tcs.Task;
}
}
}