Files
PenguinsTwoChase/Assets/Scripts/Extensions/TaskExtensions.cs
2026-05-20 11:19:41 +01:00

47 lines
1.2 KiB
C#

using System.Threading.Tasks;
using System.Collections;
using UnityEngine;
namespace PashaBibko.PenguinChase.Extensions
{
public sealed class Result<T>
{
public T Value { get; set; }
}
public static class TaskExtensions
{
public static IEnumerator Await(this Task task)
{
// Waits until the task is completed
while (!task.IsCompleted)
{
yield return null;
}
if (task.IsFaulted)
{
Debug.LogError($"Task failed: [{task.Exception?.InnerException?.Message}]");
}
}
public static IEnumerator Await<T>(this Task<T> task, Result<T> result)
where T : class
{
// Waits until the task is completed
while (!task.IsCompleted)
{
yield return null;
}
if (task.IsFaulted)
{
Debug.LogError($"Task failed: [{task.Exception?.InnerException?.Message}]");
}
// Has to return the value like this because of the wonders of C#
result.Value = task.Result;
}
}
}