using System;
using System.Threading;
using System.Threading.Tasks;
namespace Domain.Helpers
{
public class TaskHelper
{
public static async Task<T> RunWithTimeout<T>(string taskName, Func<Task<T>> function, TimeSpan timeout)
{
using var cancelSource = new CancellationTokenSource();
var task = function();
var completedTask = await Task.WhenAny(task, Task.Delay(timeout, cancelSource.Token));
if (completedTask == task)
{
cancelSource.Cancel();
return await task; // Very important in order to propagate exceptions
}
else
{
throw new TimeoutException($"The operation '{taskName}' has timed out.");
}
}
}
}
586400cookie-checkC# RunWithTimeout