diff --git a/osu.Game/Screens/Play/SaveFailedScoreButton.cs b/osu.Game/Screens/Play/SaveFailedScoreButton.cs index 29d2d0df24..98f81863d5 100644 --- a/osu.Game/Screens/Play/SaveFailedScoreButton.cs +++ b/osu.Game/Screens/Play/SaveFailedScoreButton.cs @@ -9,7 +9,6 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Threading; using osu.Game.Scoring; using osu.Game.Graphics.Containers; using osu.Game.Graphics.UserInterface; @@ -24,8 +23,6 @@ namespace osu.Game.Screens.Play private Task saveFailedScoreTask; private ScoreInfo score; - private ScheduledDelegate saveScoreDelegate; - protected readonly Bindable State = new Bindable(); private DownloadButton button; @@ -88,24 +85,19 @@ namespace osu.Game.Screens.Play private void saveScore() { + if (saveFailedScoreTask != null) + { + return; + } + State.Value = ImportState.Importing; saveFailedScoreTask = Task.Run(ImportFailedScore); - - saveScoreDelegate = new ScheduledDelegate(() => + saveFailedScoreTask.ContinueWith(s => Schedule(() => { - if (saveFailedScoreTask?.IsCompleted != true) - // If the asynchronous preparation has not completed, keep repeating this delegate. - return; - - saveScoreDelegate?.Cancel(); - - score = saveFailedScoreTask.GetAwaiter().GetResult(); - + score = s.GetAwaiter().GetResult(); State.Value = score != null ? ImportState.Imported : ImportState.Failed; - }, Time.Current, 50); - - Scheduler.Add(saveScoreDelegate); + })); } private void updateTooltip(ValueChangedEvent state)