From f812bf8f096252bacaa0195dbcf79d1a931213ec Mon Sep 17 00:00:00 2001 From: goaaats Date: Thu, 3 Apr 2025 00:53:28 +0200 Subject: [PATCH] Correctly test Framework Run vs. RunOnTick --- .../FrameworkTaskSchedulerSelfTestStep.cs | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/Dalamud/Interface/Internal/Windows/SelfTest/Steps/FrameworkTaskSchedulerSelfTestStep.cs b/Dalamud/Interface/Internal/Windows/SelfTest/Steps/FrameworkTaskSchedulerSelfTestStep.cs index 86fc8e03a..d952be419 100644 --- a/Dalamud/Interface/Internal/Windows/SelfTest/Steps/FrameworkTaskSchedulerSelfTestStep.cs +++ b/Dalamud/Interface/Internal/Windows/SelfTest/Steps/FrameworkTaskSchedulerSelfTestStep.cs @@ -3,6 +3,10 @@ using System.Threading.Tasks; using Dalamud.Game; using Dalamud.Utility; +using Microsoft.VisualBasic.Logging; + +using Log = Serilog.Log; + namespace Dalamud.Interface.Internal.Windows.SelfTest.Steps; /// @@ -25,15 +29,29 @@ internal class FrameworkTaskSchedulerSelfTestStep : ISelfTestStep { ThreadSafety.AssertNotMainThread(); + await framework.Run(async () => + { + ThreadSafety.AssertMainThread(); + + await Task.Delay(100).ConfigureAwait(true); + ThreadSafety.AssertMainThread(); + + await Task.Delay(100).ConfigureAwait(false); + ThreadSafety.AssertNotMainThread(); + }).ConfigureAwait(true); + + ThreadSafety.AssertNotMainThread(); + await framework.RunOnTick(async () => { ThreadSafety.AssertMainThread(); - await Task.Delay(100); - // TODO: Should we be scheduled back to the framework thread here? - // ThreadSafety.AssertMainThread(); + await Task.Delay(100).ConfigureAwait(true); ThreadSafety.AssertNotMainThread(); - }).ConfigureAwait(false); + + await Task.Delay(100).ConfigureAwait(false); + ThreadSafety.AssertNotMainThread(); + }).ConfigureAwait(true); ThreadSafety.AssertNotMainThread(); @@ -45,7 +63,14 @@ internal class FrameworkTaskSchedulerSelfTestStep : ISelfTestStep ThreadSafety.AssertMainThread(); this.passed = true; - }); + }).ContinueWith( + t => + { + if (t.IsFaulted) + { + Log.Error(t.Exception, "Framework Task scheduler test failed"); + } + }); if (this.task is { IsFaulted: true } or { IsCanceled: true }) {