using System; using System.Threading.Tasks; namespace test { public static class AssertAsync { public static void CompletesIn(int timeout, Action action) { var task = Task.Run(action); var completedInTime = Task.WaitAll(new[] { task }, TimeSpan.FromSeconds(timeout)); if (task.Exception != null) { if (task.Exception.InnerExceptions.Count == 1) { throw task.Exception.InnerExceptions[0]; } throw task.Exception; } if (!completedInTime) { throw new TimeoutException($"Task did not complete in {timeout} seconds."); } } } }