From 51534606c83a04c926ce6f391cef80c8541bb614 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sun, 8 Mar 2026 12:54:02 +0300 Subject: [PATCH] feat: added WaitForTask yield --- .../Systems/Yields/WaitForTaskYield.cs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Engine.Core/Systems/Yields/WaitForTaskYield.cs diff --git a/Engine.Core/Systems/Yields/WaitForTaskYield.cs b/Engine.Core/Systems/Yields/WaitForTaskYield.cs new file mode 100644 index 0000000..bc39cba --- /dev/null +++ b/Engine.Core/Systems/Yields/WaitForTaskYield.cs @@ -0,0 +1,35 @@ +using System.Threading.Tasks; + +using static Engine.Core.WaitForTaskYield; + +namespace Engine.Core; + +public class WaitForTaskYield(Task task, TaskCompletionStatus completionStatus = TaskCompletionStatus.Either) : ICoroutineYield +{ + public bool Yield() + { + switch (completionStatus) + { + case TaskCompletionStatus.Successful: + if (task.IsCanceled) + throw new("Task has been canceled."); + if (task.IsFaulted) + throw new("Task has faulted."); + return task.IsCompletedSuccessfully; + + case TaskCompletionStatus.Failed: + if (task.IsCompletedSuccessfully) + throw new("Task was completed successfully."); + return task.IsFaulted; + } + + return task.IsCompleted; + } + + public enum TaskCompletionStatus + { + Either, + Successful, + Failed + } +}