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();
- }
- }
- }
|