using System.Threading.Tasks; using System.Collections; namespace PashaBibko.PenguinChase.Extensions { public sealed class Result { public T Value { get; set; } } public static class TaskExtensions { public static IEnumerator Await(this Task task, Result result) where T : class { // Waits until the task is completed while (!task.IsCompleted) { yield return null; } // Has to return the value like this because of the wonders of C# result.Value = task.Result; } } }