using System.Reflection.Metadata.Ecma335; using Windows.Media.Core; namespace BluetoothLENet { public static class TaskExtensions { public static async Task AsTask(this Action action) { await Task.Factory.StartNew(action); } public static async Task AsTask(this Func action) { return await Task.Factory.StartNew(action); } public static async Task TimeoutAfter(this Task task, TimeSpan timeout) { using (var timeoutCancellationTokenSource = new CancellationTokenSource()) { var completedTask = await Task.WhenAny(task, Task.Delay(timeout, timeoutCancellationTokenSource.Token)); if (completedTask == task) { timeoutCancellationTokenSource.Cancel(); return; } else { throw new TimeoutException("The operation has timed out."); } } } public static async Task TimeoutAfter(this Task task, TimeSpan timeout) { using var timeoutCancellationTokenSource = new CancellationTokenSource(); var completedTask = await Task.WhenAny(task, Task.Delay(timeout, timeoutCancellationTokenSource.Token)); if (completedTask == task) { timeoutCancellationTokenSource.Cancel(); return await task; } else { throw new TimeoutException("The operation has timed out."); } } } }