12345678910111213141516171819202122232425262728293031323334353637383940 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace CSharpUtil.Extensions.Tasks
- {
-
- public static class TaskWaitingExtensions
- {
- public static async Task<TResult> WaitAsync<TResult>(this Task<TResult> task, TimeSpan timeout)
- {
- using (var timeoutCancellationTokenSource = new CancellationTokenSource())
- {
- var delayTask = Task.Delay(timeout, timeoutCancellationTokenSource.Token);
- if (await Task.WhenAny(task, delayTask) == task)
- {
- timeoutCancellationTokenSource.Cancel();
- return await task;
- }
- throw new TimeoutException("The operation has timed out.");
- }
- }
- public static async Task WaitAsync(this Task task, TimeSpan timeout)
- {
- using (var timeoutCancellationTokenSource = new CancellationTokenSource())
- {
- var delayTask = Task.Delay(timeout, timeoutCancellationTokenSource.Token);
- if (await Task.WhenAny(task, delayTask) == task)
- {
- timeoutCancellationTokenSource.Cancel();
- return;
- }
- throw new TimeoutException("The operation has timed out.");
- }
- }
- }
- }
|