Files
Syntriax.Engine/Engine.Core/Systems/Yields/WaitForTaskYield.cs

36 lines
950 B
C#

using System.Threading.Tasks;
using static Engine.Core.WaitForTaskYield;
namespace Engine.Core;
public class WaitForTaskYield(Task task, TaskCompletionStatus completionStatus = TaskCompletionStatus.Any) : ICoroutineYield
{
public bool Yield()
{
switch (completionStatus)
{
case TaskCompletionStatus.Success:
if (task.IsCanceled)
throw new("Task has been canceled.");
if (task.IsFaulted)
throw task.Exception ?? new("Task has faulted.");
return !task.IsCompletedSuccessfully;
case TaskCompletionStatus.Fail:
if (task.IsCompletedSuccessfully)
throw new("Task was completed successfully.");
return !task.IsFaulted;
}
return !task.IsCompleted;
}
public enum TaskCompletionStatus
{
Any,
Success,
Fail
}
}