using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace TimeOutHelper { public static class TimeHelperClass { /// /// 异步方法超时处理 /// /// /// /// /// /// public static async Task ExecuteWithTimeoutAsync(Func> function, TimeSpan timeout) { using (var cts = new CancellationTokenSource()) { var timeoutTask = Task.Delay(timeout, cts.Token); var functionTask = function(cts.Token); if (await Task.WhenAny(timeoutTask, functionTask) == timeoutTask) { cts.Cancel(); throw new TimeoutException($"操作在 {timeout.TotalSeconds} 秒后超时"); } return await functionTask; } } /// /// 同步方法超时处理 /// /// /// /// /// public static async Task ExecuteWithTimeout(Func function, TimeSpan timeout) { return await ExecuteWithTimeoutAsync(ct => Task.Run(() => function(), ct), timeout); } } }