diff --git a/src/Avalonia.Animation/Animation.cs b/src/Avalonia.Animation/Animation.cs
index daa4793ef0..172782c5a9 100644
--- a/src/Avalonia.Animation/Animation.cs
+++ b/src/Avalonia.Animation/Animation.cs
@@ -3,10 +3,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Reactive.Disposables;
using System.Reactive.Linq;
+using System.Threading;
using System.Threading.Tasks;
+
using Avalonia.Animation.Animators;
using Avalonia.Animation.Easings;
-using Avalonia.Collections;
using Avalonia.Data;
using Avalonia.Metadata;
@@ -319,7 +320,7 @@ namespace Avalonia.Animation
return (newAnimatorInstances, subscriptions);
}
- ///
+ ///
public IDisposable Apply(Animatable control, IClock clock, IObservable match, Action onComplete)
{
var (animators, subscriptions) = InterpretKeyframes(control);
@@ -344,25 +345,40 @@ namespace Avalonia.Animation
if (onComplete != null)
{
- Task.WhenAll(completionTasks).ContinueWith(_ => onComplete());
+ Task.WhenAll(completionTasks).ContinueWith(
+ (_, state) => ((Action)state).Invoke(),
+ onComplete);
}
}
return new CompositeDisposable(subscriptions);
}
- ///
- public Task RunAsync(Animatable control, IClock clock = null)
+ ///
+ public Task RunAsync(Animatable control, IClock clock = null, CancellationToken cancellationToken = default)
{
+ if (cancellationToken.IsCancellationRequested)
+ {
+ return Task.CompletedTask;
+ }
+
var run = new TaskCompletionSource