| 123456789101112131415161718192021222324252627282930313233 |
- namespace qdr.fnd.core.pqueue.fnd.candidates
- {
- public class TimeoutUtils
- {
- public static async Task ExecuteWithTimeoutAsync(Action action, TimeSpan timeout)
- {
- using var cts = new CancellationTokenSource();
- var task = Task.Run(action, cts.Token);
- try
- {
- if (await Task.WhenAny(task, Task.Delay(timeout, cts.Token)) == task)
- {
- // Task completed within the timeout
- await task; // Propagate any exceptions
- }
- else
- {
- // Timeout occurred
- cts.Cancel();
- throw new TimeoutException($"The operation has timed out after {timeout.TotalSeconds} seconds.");
- }
- }
- catch(Exception){
- throw;
- }
- finally
- {
- cts.Cancel(); // Ensure we always cancel the CancellationTokenSource
- }
- }
- }
- }
|