123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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<TResult> AsTask<TResult>(this Func<TResult> 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<TResult> TimeoutAfter<TResult>(this Task<TResult> 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.");
- }
- }
- }
- }
|