diff --git a/src/Avalonia.Base/Threading/Dispatcher.cs b/src/Avalonia.Base/Threading/Dispatcher.cs
index aa2a7a7a8e..55a9b6984a 100644
--- a/src/Avalonia.Base/Threading/Dispatcher.cs
+++ b/src/Avalonia.Base/Threading/Dispatcher.cs
@@ -92,6 +92,20 @@ namespace Avalonia.Threading
return _jobRunner.InvokeAsync(function, priority);
}
+ ///
+ public Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal)
+ {
+ Contract.Requires(function != null);
+ return _jobRunner.InvokeAsync(function, priority).Unwrap();
+ }
+
+ ///
+ public Task InvokeAsync(Func> function, DispatcherPriority priority = DispatcherPriority.Normal)
+ {
+ Contract.Requires(function != null);
+ return _jobRunner.InvokeAsync(function, priority).Unwrap();
+ }
+
///
public void Post(Action action, DispatcherPriority priority = DispatcherPriority.Normal)
{
diff --git a/src/Avalonia.Base/Threading/IDispatcher.cs b/src/Avalonia.Base/Threading/IDispatcher.cs
index 1fdc9da5fe..8f46f99283 100644
--- a/src/Avalonia.Base/Threading/IDispatcher.cs
+++ b/src/Avalonia.Base/Threading/IDispatcher.cs
@@ -40,5 +40,23 @@ namespace Avalonia.Threading
/// The method.
/// The priority with which to invoke the method.
Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal);
+
+ ///
+ /// Queues the specified work to run on the dispatcher thread and returns a proxy for the
+ /// task returned by .
+ ///
+ /// The work to execute asynchronously.
+ /// The priority with which to invoke the method.
+ /// A task that represents a proxy for the task returned by .
+ Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal);
+
+ ///
+ /// Queues the specified work to run on the dispatcher thread and returns a proxy for the
+ /// task returned by .
+ ///
+ /// The work to execute asynchronously.
+ /// The priority with which to invoke the method.
+ /// A task that represents a proxy for the task returned by .
+ Task InvokeAsync(Func> function, DispatcherPriority priority = DispatcherPriority.Normal);
}
}
\ No newline at end of file
diff --git a/tests/Avalonia.UnitTests/ImmediateDispatcher.cs b/tests/Avalonia.UnitTests/ImmediateDispatcher.cs
index 44d8c78054..fac4ee64e7 100644
--- a/tests/Avalonia.UnitTests/ImmediateDispatcher.cs
+++ b/tests/Avalonia.UnitTests/ImmediateDispatcher.cs
@@ -9,28 +9,45 @@ namespace Avalonia.UnitTests
///
public class ImmediateDispatcher : IDispatcher
{
+ ///
public bool CheckAccess()
{
return true;
}
+ ///
public void Post(Action action, DispatcherPriority priority = DispatcherPriority.Normal)
{
action();
}
+ ///
public Task InvokeAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal)
{
action();
- return Task.FromResult