| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | using System;using System.Threading.Tasks;namespace InABox.Core{    public static class TaskUtils    {        /// <summary>        ///     Blocks while condition is true or timeout occurs.        /// </summary>        /// <param name="condition">The condition that will perpetuate the block.</param>        /// <param name="frequency">The frequency at which the condition will be check, in milliseconds.</param>        /// <param name="timeout">Timeout in milliseconds.</param>        /// <exception cref="TimeoutException"></exception>        /// <returns></returns>        public static async Task WaitWhile(Func<bool> condition, int frequency = 25, int timeout = -1)        {            var waitTask = Task.Run(async () =>            {                while (condition()) await Task.Delay(frequency);            });            if (waitTask != await Task.WhenAny(waitTask, Task.Delay(timeout)))                throw new TimeoutException();        }        /// <summary>        ///     Blocks until condition is true or timeout occurs.        /// </summary>        /// <param name="condition">The break condition.</param>        /// <param name="frequency">The frequency at which the condition will be checked.</param>        /// <param name="timeout">The timeout in milliseconds.</param>        /// <returns></returns>        public static async Task WaitUntil(Func<bool> condition, int frequency = 25, int timeout = -1)        {            var waitTask = Task.Run(async () =>            {                while (!condition()) await Task.Delay(frequency);            });            if (waitTask != await Task.WhenAny(waitTask,                    Task.Delay(timeout)))                throw new TimeoutException();        }    }}
 |